'PL/SQL'에 해당되는 글 3건

  1. 2010.06.21 DB2 Sequence 생성하는 PB 스크립트
  2. 2009.09.21 drop table, cascade constraint
  3. 2009.09.21 PL/SQL EXCEPTION 종류
Powerbuilder2010. 6. 21. 20:57









String ls_sequence
String ls_prefix
String ls_len, ls_mod
String ls_value1, ls_value2
String ls_select, ls_get, ls_create, ls_grant

String ls_pk

SELECT ZCCVAL02,     ZCCVAL03,   ZCCVAL04
INTO   :ls_sequence, :ls_prefix, :ls_len
FROM   TLVDTALB.GZCDA121
WHERE  ZCCSYSCD = 'MIS'
AND    ZCCGRPCD = 'ZWK'
AND    ZCCCOMCD = :as_wktp
;

If Trim(ls_sequence) = '' OR Trim(ls_prefix)  = '' OR Trim(ls_len)  = '' Then
Return '오류'
End if

ls_mod = '1' + Fill('0', long(ls_len)) 

// 1. 값 가져올 SQL 문장 생성
ls_get    = " NEXTVAL for " + ls_sequence

ls_select = "SELECT CHAR(Mod( " + ls_get + "," + ls_mod + ") ), CHAR(( " + ls_get + " ) / " + ls_mod + " )  FROM SYSIBM.SYSDUMMY1"

// 2. 시도
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
PREPARE SQLSA FROM :ls_select ;
OPEN DYNAMIC my_cursor ;

IF sqlca.sqlcode <> 0 Then
   // 3. 존재하지 않을 경우 새로 생성후 값 가져오기
ls_create = "CREATE SEQUENCE " + ls_sequence + " AS NUMERIC (10,0) START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE"
EXECUTE IMMEDIATE :ls_create;
ls_grant = "GRANT ALL ON " + ls_sequence + " TO PUBLIC "
EXECUTE IMMEDIATE :ls_grant;
DECLARE my_cursor1 DYNAMIC CURSOR FOR SQLSA ;
PREPARE SQLSA FROM :ls_select ;

OPEN DYNAMIC my_cursor1 ;
FETCH my_cursor1 INTO :ls_value1, :ls_value2 ;
CLOSE my_cursor1 ;
Else
// 4. 존재할 경우 값 가져오기
FETCH my_cursor INTO :ls_value1, :ls_value2 ;
CLOSE my_cursor ;
End if

ls_value1 = Trim(ls_value1)
ls_value2 = Trim(ls_value2)

If LONG(ls_value2) <> 0 Then
ls_prefix = mid(ls_prefix,1, lenA(ls_prefix) - 1) + char(Asc(Right(ls_prefix,1)) + 1)
End if

ls_pk =  ls_prefix +   Fill('0', long(ls_len) - lenA(ls_value1) ) + ls_value1

Return ls_pk
Posted by Julyus
Oracle2009. 9. 21. 13:42

* 테이블 삭제 시

drop table 테이블명 CASCADE CONSTRAINT;

 

* 휴지통 비우기

purge recyclebin;

 

* 테이블 완전 삭제하기 (휴지통에 저장되지 않음)

DROP TABLE 테이블명 CASCADE CONSTRAINT purge;

 

* 휴지통에 있는 테이블 복원

FLASHBACK TABLE 테이블명 TO BEFORE DROP

 

* 컬럼명 변경

ALTER TABLE 테이블명 RENAME COLUMN 변경전 컬럼명 TO 변경후 컬럼명;

Posted by Julyus
Oracle2009. 9. 21. 12:00
PL/SQL EXCEPTION 종류 sql

2009/08/13 14:57

복사 http://blog.naver.com/soo02da/150067422573

PL/SQL EXCEPTION 종류

예외 내용

예외 번호

SQLCODE

발생시점

ACCESS_INTO_NULL

ORA-06530

-6530

초기화 되지 않은 오브젝트에 값을 할당하려고 할 경우

CASE_NOT_FOUND

ORA-06592

-6592

CASE 문장에서 ELSE 구문도 없고 WHEN 절에 명시된 조건을 만족하는 것이 하나도 없을 경우

COLLECTION_IS_NULL

ORA-06531

-6531

초기화 되지 않은 중첩 테이블이나 VARRAY같은 콜렉션을 EXISTS 외의 다른 메소드를 접근을 시도할 경우

CURSOR_ALREADY_OPEN

ORA-06511

-6511

이미 오픈된 커서를 다시 오픈하려고 시도하는 경우

DUP_VAL_ON_INDEX

ORA-00001

-1

유일 인덱스가 걸린 칼럼에 중복 데이터를 입력할 경우

INVALID_CURSOR

ORA-01001

-1001

허용되지 않은 커서에 접근할 경우(오픈되지 않은 커서를 닫으려고 시도하는 경우)

INVALID_NUMBER

ORA-01722

-1722

SQL 문장에서 문자형 데이터를 숫자형으로 변환할 때 제대로 된 숫자로 변환이 되지 않을 경우

LOGIN_DENIED

ORA-01017

-1017

잘못된 사용자나 비밀번호로 로그인을 시도할 때

NO_DATA_FOUND

ORA-01403

+100

SELECT INTO 문장의 결과로 선택된 로우가 하나도 없을 경우

NOT_LOGGED_ON

ORA-01012

-1012

오라클에 연결되지 않았을 경우

PROGRAM_ERROR

ORA-06501

-6501

PL/SQL 내부에 문제가 발생했을 경우

SELF_IS_NULL

ORA-30625

-30625

OBJECT 타입이 초기화 되지 않은 상태에서 MEMBER메소드를 사용할 경우

STORAGE_ERROR

ORA-06500

-6500

메모리가 부족한 경우

SUBSCRIPT_BEYOND_COUNT

ORA-06533

-6533

중첩 테이블이나 VARRAY의 요소값에 접근할 때, 명시한 인덱스 번호가 콜렉션 전체 크기를 넘어설 경우

SUBSCRIPT_OUTSIDE_LIMIT

ORA-06532

-6532

중첩 테이블이나 VARRAY의 요소값에 접근할 때, 잘못된 인덱스 번호를 사용할 경우(, 인덱스 번호로 -1 사용시)

SYS_INVALID_ROWID

ORA-01410

-1410

오라클 리소스를 기다리는 동안 타임아웃이 발생했을 때

TIMEOUT_ON_RESOURCE

ORA-00051

-51

오라클이 리소를 기다리는 동안 타임아웃이 발생했을 때

TOO_MANY_ROWS

ORA-01422

-1422

SELECT INTO 문장에서 하나 이상의 로우가 반환될 때

VALUE_ERROR

ORA-06502

-6502

문자형 데이터를 숫자형으로 변환하는데 타당한 수사가 아니거나 값을 할당 시 값의 크기가 선언된 변수의 크기를 넘어서는 경우와 같이 값을 변환하거나 할당할 때 오류가 발생할 경우

ZERO_DIVIDE

ORA-01476

-1476

제수가 0일 때

 

[출처] PL/SQL EXCEPTION 종류|작성자 셩이

Posted by Julyus