서버종료
./shutdown
ps -ef | grep /usr/local/tomcat
소스배포
rm webapps/*
rsync 또는 scp를 이용한 war 배포
서버시작
./startup
curl check address | awk response
서버종료
./shutdown
ps -ef | grep /usr/local/tomcat
소스배포
rm webapps/*
rsync 또는 scp를 이용한 war 배포
서버시작
./startup
curl check address | awk response
시작(Win+R) – gpedit.msc
‘로컬 그룹 정책 편집기’
좌측트리 : 사용자 구성 – 관리템플릿 – 바탕화면
우측 : Aero 흔들기 창 최소화 마우스 제스처 사용 안 함 – 우클릭 – 편집 – 사용 – 확인
완료.
이제 창이 닫히는 불상사는 일어나지 않습니다
코드
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; /** * @author archmagece * @with pizzahut-parent * @since 2016-11-08 */ public class DBMetaTest { public static void main(String[] args) { try{ Class.forName("oracle.jdbc.OracleDriver"); Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ODRDB","username","password"); DatabaseMetaData metadata = connection.getMetaData(); System.out.println("allProceduresAreCallable : "+ metadata.allProceduresAreCallable()); System.out.println("allTablesAreSelectable : "+ metadata.allTablesAreSelectable()); System.out.println("URL : "+ metadata.getURL()); System.out.println("UserName : "+ metadata.getUserName()); System.out.println("isReadOnly : "+ metadata.isReadOnly()); System.out.println("nullsAreSortedHigh : "+ metadata.nullsAreSortedHigh()); System.out.println("nullsAreSortedLow : "+ metadata.nullsAreSortedLow()); System.out.println("nullsAreSortedAtStart : "+ metadata.nullsAreSortedAtStart()); System.out.println("nullsAreSortedAtEnd : "+ metadata.nullsAreSortedAtEnd()); System.out.println("getDatabaseProductName : "+ metadata.getDatabaseProductName()); System.out.println("getDatabaseProductVersion : "+ metadata.getDatabaseProductVersion()); System.out.println("getDriverName : "+ metadata.getDriverName()); System.out.println("getDriverVersion : "+ metadata.getDriverVersion()); System.out.println("getDriverMajorVersion : "+ metadata.getDriverMajorVersion()); System.out.println("getDriverMinorVersion : "+ metadata.getDriverMinorVersion()); System.out.println("usesLocalFiles : "+ metadata.usesLocalFiles()); System.out.println("usesLocalFilePerTable : "+ metadata.usesLocalFilePerTable()); System.out.println("supportsMixedCaseIdentifiers : "+ metadata.supportsMixedCaseIdentifiers()); System.out.println("storesUpperCaseIdentifiers : "+ metadata.storesUpperCaseIdentifiers()); System.out.println("storesLowerCaseIdentifiers : "+ metadata.storesLowerCaseIdentifiers()); System.out.println("storesMixedCaseIdentifiers : "+ metadata.storesMixedCaseIdentifiers()); System.out.println("supportsMixedCaseQuotedIdentifiers : "+ metadata.supportsMixedCaseQuotedIdentifiers()); System.out.println("storesUpperCaseQuotedIdentifiers : "+ metadata.storesUpperCaseQuotedIdentifiers()); System.out.println("storesLowerCaseQuotedIdentifiers : "+ metadata.storesLowerCaseQuotedIdentifiers()); System.out.println("storesMixedCaseQuotedIdentifiers : "+ metadata.storesMixedCaseQuotedIdentifiers()); System.out.println("getIdentifierQuoteString : "+ metadata.getIdentifierQuoteString()); System.out.println("getSQLKeywords : "+ metadata.getSQLKeywords()); System.out.println("getNumericFunctions : "+ metadata.getNumericFunctions()); System.out.println("getStringFunctions : "+ metadata.getStringFunctions()); System.out.println("getSystemFunctions : "+ metadata.getSystemFunctions()); System.out.println("getTimeDateFunctions : "+ metadata.getTimeDateFunctions()); System.out.println("getSearchStringEscape : "+ metadata.getSearchStringEscape()); System.out.println("getExtraNameCharacters : "+ metadata.getExtraNameCharacters()); System.out.println("supportsAlterTableWithAddColumn : "+ metadata.supportsAlterTableWithAddColumn()); System.out.println("supportsAlterTableWithDropColumn : "+ metadata.supportsAlterTableWithDropColumn()); System.out.println("supportsColumnAliasing : "+ metadata.supportsColumnAliasing()); System.out.println("nullPlusNonNullIsNull : "+ metadata.nullPlusNonNullIsNull()); System.out.println("supportsConvert : "+ metadata.supportsConvert()); //supportsConvert(i" : "+ nt fromType, int toType) System.out.println("supportsTableCorrelationNames : "+ metadata.supportsTableCorrelationNames()); System.out.println("supportsDifferentTableCorrelationNames : "+ metadata.supportsDifferentTableCorrelationNames()); System.out.println("supportsExpressionsInOrderBy : "+ metadata.supportsExpressionsInOrderBy()); System.out.println("supportsOrderByUnrelated : "+ metadata.supportsOrderByUnrelated()); System.out.println("supportsGroupBy : "+ metadata.supportsGroupBy()); System.out.println("supportsGroupByUnrelated : "+ metadata.supportsGroupByUnrelated()); System.out.println("supportsGroupByBeyondSelect : "+ metadata.supportsGroupByBeyondSelect()); System.out.println("supportsLikeEscapeClause : "+ metadata.supportsLikeEscapeClause()); System.out.println("supportsMultipleResultSets : "+ metadata.supportsMultipleResultSets()); System.out.println("supportsMultipleTransactions : "+ metadata.supportsMultipleTransactions()); System.out.println("supportsNonNullableColumns : "+ metadata.supportsNonNullableColumns()); System.out.println("supportsMinimumSQLGrammar : "+ metadata.supportsMinimumSQLGrammar()); System.out.println("supportsCoreSQLGrammar : "+ metadata.supportsCoreSQLGrammar()); System.out.println("supportsExtendedSQLGrammar : "+ metadata.supportsExtendedSQLGrammar()); System.out.println("supportsANSI92EntryLevelSQL : "+ metadata.supportsANSI92EntryLevelSQL()); System.out.println("supportsANSI92IntermediateSQL : "+ metadata.supportsANSI92IntermediateSQL()); System.out.println("supportsANSI92FullSQL : "+ metadata.supportsANSI92FullSQL()); System.out.println("supportsIntegrityEnhancementFacility : "+ metadata.supportsIntegrityEnhancementFacility()); System.out.println("supportsOuterJoins : "+ metadata.supportsOuterJoins()); System.out.println("supportsFullOuterJoins: "+ metadata.supportsFullOuterJoins()); System.out.println("supportsLimitedOuterJoins : "+ metadata.supportsLimitedOuterJoins()); System.out.println("getSchemaTerm : "+ metadata.getSchemaTerm()); System.out.println("getProcedureTerm : "+ metadata.getProcedureTerm()); System.out.println("getCatalogTerm : "+ metadata.getCatalogTerm()); System.out.println("isCatalogAtStart : "+ metadata.isCatalogAtStart()); System.out.println("getCatalogSeparator : "+ metadata.getCatalogSeparator()); System.out.println("supportsSchemasInDataManipulation : "+ metadata.supportsSchemasInDataManipulation()); System.out.println("supportsSchemasInProcedureCalls : "+ metadata.supportsSchemasInProcedureCalls()); System.out.println("supportsSchemasInTableDefinitions : "+ metadata.supportsSchemasInTableDefinitions()); System.out.println("supportsSchemasInIndexDefinitions : "+ metadata.supportsSchemasInIndexDefinitions()); System.out.println("supportsSchemasInPrivilegeDefinitions : "+ metadata.supportsSchemasInPrivilegeDefinitions()); System.out.println("supportsCatalogsInDataManipulation : "+ metadata.supportsCatalogsInDataManipulation()); System.out.println("supportsCatalogsInProcedureCalls : "+ metadata.supportsCatalogsInProcedureCalls()); System.out.println("supportsCatalogsInTableDefinitions : "+ metadata.supportsCatalogsInTableDefinitions()); System.out.println("supportsCatalogsInIndexDefinitions : "+ metadata.supportsCatalogsInIndexDefinitions()); System.out.println("supportsCatalogsInPrivilegeDefinitions : "+ metadata.supportsCatalogsInPrivilegeDefinitions()); System.out.println("supportsPositionedDelete : "+ metadata.supportsPositionedDelete()); System.out.println("supportsPositionedUpdate : "+ metadata.supportsPositionedUpdate()); System.out.println("supportsSelectForUpdate : "+ metadata.supportsSelectForUpdate()); System.out.println("supportsStoredProcedures : "+ metadata.supportsStoredProcedures()); System.out.println("supportsSubqueriesInComparisons : "+ metadata.supportsSubqueriesInComparisons()); System.out.println("supportsSubqueriesInExists : "+ metadata.supportsSubqueriesInExists()); System.out.println("supportsSubqueriesInIns : "+ metadata.supportsSubqueriesInIns()); System.out.println("supportsSubqueriesInQuantifieds : "+ metadata.supportsSubqueriesInQuantifieds()); System.out.println("supportsCorrelatedSubqueries : "+ metadata.supportsCorrelatedSubqueries()); System.out.println("supportsUnion : "+ metadata.supportsUnion()); System.out.println("supportsUnionAll : "+ metadata.supportsUnionAll()); System.out.println("supportsOpenCursorsAcrossCommit : "+ metadata.supportsOpenCursorsAcrossCommit()); System.out.println("supportsOpenCursorsAcrossRollback : "+ metadata.supportsOpenCursorsAcrossRollback()); System.out.println("supportsOpenStatementsAcrossCommit : "+ metadata.supportsOpenStatementsAcrossCommit()); System.out.println("supportsOpenStatementsAcrossRollback : "+ metadata.supportsOpenStatementsAcrossRollback()); System.out.println("getMaxBinaryLiteralLength : "+ metadata.getMaxBinaryLiteralLength()); System.out.println("getMaxCharLiteralLength : "+ metadata.getMaxCharLiteralLength()); System.out.println("getMaxColumnNameLength : "+ metadata.getMaxColumnNameLength()); System.out.println("getMaxColumnsInGroupBy : "+ metadata.getMaxColumnsInGroupBy()); System.out.println("getMaxColumnsInIndex : "+ metadata.getMaxColumnsInIndex()); System.out.println("getMaxColumnsInOrderBy : "+ metadata.getMaxColumnsInOrderBy()); System.out.println("getMaxColumnsInSelect : "+ metadata.getMaxColumnsInSelect()); System.out.println("getMaxColumnsInTable : "+ metadata.getMaxColumnsInTable()); System.out.println("getMaxConnections : "+ metadata.getMaxConnections()); System.out.println("getMaxCursorNameLength : "+ metadata.getMaxCursorNameLength()); System.out.println("getMaxIndexLength : "+ metadata.getMaxIndexLength()); System.out.println("getMaxSchemaNameLength : "+ metadata.getMaxSchemaNameLength()); System.out.println("getMaxProcedureNameLength : "+ metadata.getMaxProcedureNameLength()); System.out.println("getMaxCatalogNameLength : "+ metadata.getMaxCatalogNameLength()); System.out.println("getMaxRowSize : "+ metadata.getMaxRowSize()); System.out.println("doesMaxRowSizeIncludeBlobs : "+ metadata.doesMaxRowSizeIncludeBlobs()); System.out.println("getMaxStatementLength : "+ metadata.getMaxStatementLength()); System.out.println("getMaxStatements : "+ metadata.getMaxStatements()); System.out.println("getMaxTableNameLength : "+ metadata.getMaxTableNameLength()); System.out.println("getMaxTablesInSelect : "+ metadata.getMaxTablesInSelect()); System.out.println("getMaxUserNameLength : "+ metadata.getMaxUserNameLength()); System.out.println("getDefaultTransactionIsolation : "+ metadata.getDefaultTransactionIsolation()); System.out.println("supportsTransactions : "+ metadata.supportsTransactions()); // System.out.println(" : "+ metadata.supportsTransactionIsolationLevel()); System.out.println("supportsDataDefinitionAndDataManipulationTransactions : "+ metadata.supportsDataDefinitionAndDataManipulationTransactions()); System.out.println("supportsDataManipulationTransactionsOnly : "+ metadata.supportsDataManipulationTransactionsOnly()); System.out.println("dataDefinitionCausesTransactionCommit : "+ metadata.dataDefinitionCausesTransactionCommit()); System.out.println("dataDefinitionIgnoredInTransactions : "+ metadata.dataDefinitionIgnoredInTransactions()); // System.out.println(" : "+ metadata.getProcedures()); // System.out.println(" : "+ metadata.getProcedureColumns()); // System.out.println(" : "+ metadata.getTables()); // System.out.println(" : "+ metadata.getSchemas()); // System.out.println(" : "+ metadata.getCatalogs()); // System.out.println(" : "+ metadata.getTableTypes()); // System.out.println(" : "+ metadata.getColumns()); // System.out.println(" : "+ metadata.getColumnPrivileges()); // System.out.println(" : "+ metadata.getTablePrivileges()); // System.out.println(" : "+ metadata.getBestRowIdentifier()); // System.out.println(" : "+ metadata.getVersionColumns()); // System.out.println(" : "+ metadata.getPrimaryKeys()); // System.out.println(" : "+ metadata.getImportedKeys()); // System.out.println(" : "+ metadata.getExportedKeys()); // System.out.println(" : "+ metadata.getCrossReference()); // System.out.println(" : "+ metadata.getTypeInfo()); // System.out.println(" : "+ metadata.getIndexInfo()); // System.out.println(" : "+ metadata.supportsResultSetType()); // System.out.println(" : "+ metadata.supportsResultSetConcurrency()); // System.out.println(" : "+ metadata.ownUpdatesAreVisible()); // System.out.println(" : "+ metadata.ownDeletesAreVisible()); // System.out.println(" : "+ metadata.ownInsertsAreVisible()); // System.out.println(" : "+ metadata.othersUpdatesAreVisible()); // System.out.println(" : "+ metadata.othersDeletesAreVisible()); // System.out.println(" : "+ metadata.othersInsertsAreVisible()); // System.out.println(" : "+ metadata.updatesAreDetected()); // System.out.println(" : "+ metadata.deletesAreDetected()); // System.out.println(" : "+ metadata.insertsAreDetected()); System.out.println("supportsBatchUpdates : "+ metadata.supportsBatchUpdates()); // System.out.println(" : "+ metadata.getUDTs()); System.out.println("getConnection : "+ metadata.getConnection()); System.out.println("supportsSavepoints : "+ metadata.supportsSavepoints()); System.out.println("supportsNamedParameters : "+ metadata.supportsNamedParameters()); System.out.println("supportsMultipleOpenResults : "+ metadata.supportsMultipleOpenResults()); System.out.println("supportsGetGeneratedKeys : "+ metadata.supportsGetGeneratedKeys()); // System.out.println(" : "+ metadata.getSuperTypes()); // System.out.println(" : "+ metadata.getSuperTables()); // System.out.println(" : "+ metadata.getAttributes()); // System.out.println(" : "+ metadata.supportsResultSetHoldability()); System.out.println("getResultSetHoldability : "+ metadata.getResultSetHoldability()); System.out.println("getDatabaseMajorVersion : "+ metadata.getDatabaseMajorVersion()); System.out.println("getDatabaseMinorVersion : "+ metadata.getDatabaseMinorVersion()); System.out.println("getJDBCMajorVersion : "+ metadata.getJDBCMajorVersion()); System.out.println("getJDBCMinorVersion : "+ metadata.getJDBCMinorVersion()); System.out.println("getSQLStateType : "+ metadata.getSQLStateType()); System.out.println("locatorsUpdateCopy : "+ metadata.locatorsUpdateCopy()); System.out.println("supportsStatementPooling : "+ metadata.supportsStatementPooling()); System.out.println("getRowIdLifetime : "+ metadata.getRowIdLifetime()); // System.out.println(" : "+ metadata.getSchemas(String catalog, String schemaPattern)); System.out.println("supportsStoredFunctionsUsingCallSyntax : "+ metadata.supportsStoredFunctionsUsingCallSyntax()); System.out.println("autoCommitFailureClosesAllResultSets : "+ metadata.autoCommitFailureClosesAllResultSets()); System.out.println("getClientInfoProperties : "+ metadata.getClientInfoProperties()); // System.out.println(" : "+ metadata.getFunctions()); // System.out.println(" : "+ metadata.getFunctionColumns()); // System.out.println(" : "+ metadata.getPseudoColumns()); // System.out.println("generatedKeyAlwaysReturned : "+ metadata.generatedKeyAlwaysReturned()); System.out.println("getMaxLogicalLobSize : "+ metadata.getMaxLogicalLobSize()); System.out.println("Retrieves whether this database supports REF CURSOR : " +metadata.supportsRefCursors()); } catch(Exception e) { e.printStackTrace(); System.out.println(e); } } }
제목은 영어지만 내용은 한국어로
http://viralpatel.net/blogs/java-passing-array-to-oracle-stored-procedure
좋은 샘플 발견해고 코드 수정해서 돌려봤는데…
아무리 해도 응답값이 ARRAY.lengh() == 빵트루
뭐가 잘못된건가 싶어서 할 수 있는 모든코드에 디버깅을 돌려봤지만…
오라클은 디버깅이 안되지…
이런경우가 오랜만이라 쓸데없이 디버깅 하느라 반나절을 날려먹었다.
Solution : http://stackoverflow.com/questions/14998299/oracle-array-filled-with-null-data-in-java
이걸 항상 명심해야하는데말이지
알 수도 없고 디버깅 해도 안되는 오류는… 블랙박스 라이브러리의 버전 문제다.
이 프로젝트에는 오라클 ojdbc14.jar을 쓰고 있었는데
ojdbc6.jar + orai18n 이걸로 교체 해 주니 해결됐다.
코드에는 문제가 없었던걸로…
자바 개발을 하다보면 오픈소스만 쓰다보니 모든걸 직접 디버깅하고 오류를 발견할 수 있으리라는 착각에 빠지게 된다. 라이브러리도 정 맘에안드는 부분은 소스 수정하고 jar 패키징 다시해서 쓰기도 하고 하니까… github forking 해서 쓰기도 하고
오라클이나 SAP 등등 상용툴과 마주하게 되면 다른 개발습관이 필요한데
merge + ing
머징
Javascript에서 기본 오브젝트 정보를 가져올 때는 DOM구조를 타고 내려가는게 중요한데
location.href 라고 쓰는것은
window.document.location.href 와 동일하다.
예) http://memo.polypia.net/archives/2183 location.href http://memo.polypia.net/archives/2183 .host memo.polypia.net .protocol http: .pathname /archives/2183
요즘은 디버거가 잘 되어 있어서 location만 치면 객체구조를 확인가능하다.
테스트코드 짜다가 버리기 아까워서 저장.
타입선언
create or replace TYPE USER_OBJECT AS OBJECT ( V_USERNAME VARCHAR2(20), V_PHONE VARCHAR2(20), V_ADDRESS VARCHAR2(100) ); create or replace TYPE USER_OBJECT_ARRAY AS TABLE OF USER_OBJECT;
테이블
CREATE TABLE USERTABLE ( V_USERNAME VARCHAR2(20), V_PHONE VARCHAR2(20), V_ADDRESS VARCHAR2(100) )
그냥 실행문
DECLARE V_CODE VARCHAR2(100); V_MSG VARCHAR2(100); v_CNT NUMBER(4) :=0 ; v_userArr USER_OBJECT_ARRAY; v_user USER_OBJECT; BEGIN v_userArr := USER_OBJECT_ARRAY(USER_OBJECT('김유저', '010-000-3333', '서울시 전체'), USER_OBJECT('최유저', '010-4444-4444', '경기도 전체')); for i in 1..v_userArr.count loop dbms_output.put_line(v_userArr(i).V_USERNAME); end loop; END;
프로시저
create or replace PROCEDURE MASS_USER_PROCEDURE ( v_userArr in USER_OBJECT_ARRAY, O_RESULR_CODE OUT VARCHAR2, O_RESULT_MESSAGE OUT VARCHAR2) IS --V_USERNAME VARCHAR2(20); --V_PHONE VARCHAR2(20); --V_ADDRESS VARCHAR2(100); i BINARY_INTEGER := 0; BEGIN for i in 1..v_userArr.count loop dbms_output.put_line(v_userArr(i).V_USERNAME); insert into usertable (V_USERNAME, V_PHONE, V_ADDRESS) values (v_userArr(i).V_USERNAME, v_userArr(i).V_PHONE, v_userArr(i).V_ADDRESS); end loop; commit; END MASS_USER_PROCEDURE;
프로시저 호출코드
DECLARE v_code VARCHAR2(100); v_message VARCHAR2(100); v_userArr USER_OBJECT_ARRAY; v_user USER_OBJECT; BEGIN v_userArr := USER_OBJECT_ARRAY(USER_OBJECT('김유저', '0103333', '서울시 전체'), USER_OBJECT('최유저', '0104444', '경기도 전체')); for i in 1..v_userArr.count loop MASS_USER_PROCEDURE(v_userArr, V_CODE, V_MSG); dbms_output.put_line(v_CODE); end loop; END;
제일 도움된 페이지 :
https://oracle-base.com/articles/8i/collections-8i