//테스트용 테이블생성
CREATE TABLE testTable(
NUM NUMBER PRIMARY KEY,
NAME VARCHAR2(30) NOT NULL
);
select * from testTable
INSERT INTO testTable VALUES(2, 'test2')
//밑에 있는 함수 호출
SELECT numadd() FROM DUAL
//함수 구문 (into를 이용해서 쿼리에 있는 것을 변수에 넣었습니다
CREATE OR REPLACE FUNCTION numAdd
RETURN NUMBER IS //NUMBER형식 리턴
MAXNUM testTable.NUM%TYPE; //testTable의 NUM칼럼 형식 변수
F_NUM NUMBER(4); //숫자4자리
F_NAME VARCHAR(30); //문자 30(한글2, 영어1)
CURSOR C1 //커서를 넣습니다. 넣는 기준은 밑에 쿼리이고, F_NUM, F_NAME형식입니다.
IS
SELECT NUM, NAME INTO F_NUM, F_NAME FROM testTable;
BEGIN
SELECT NULLIF(MAX(NUM)+1, 1) INTO MAXNUM FROM testTable; //NULLIF( MYSQL 에서는 IFNULL입니다.)
DBMS_OUTPUT.PUT_LINE(MAXNUM||'check'); //문자열
OPEN C1; //CURSOR 사용준비
LOOP //돌립니다.
FETCH C1 INTO F_NUM, F_NAME; //1개씩 가져옵니다 각각 F_NUM, F_NAME에 넣습니다.
EXIT WHEN C1%NOTFOUND; //나오는 조건은 C1을 찾을수 없으면 나옵니다.
DBMS_OUTPUT.PUT_LINE(F_NUM || F_NAME||'dasdfasdf');
END LOOP; //루프문의 끝입니다.
return MAXNUM; //리턴
END numAdd; //함수끝
/
----------------------------------------------------------------------
//해당 쪽에 문자열을 붙여주는 프로시저
CREATE OR REPLACE PROCEDURE testA
IS
BEGIN
UPDATE testTable
SET name = name || '2';
COMMIT;
END testA;
/
//프로시저 호출하기
EXECUTE testA();
----------------------------------------------------------------------
//dbms_output.put_line주석 보여주기
SET SERVEROUTPUT ON;
//간단한 block
begin
dbms_output.put_line('확인');
end;
/
'DATABASE > ORACLE' 카테고리의 다른 글
ORACLE Error : ORA-12519, Error preloading the connection pool, no appropriate service handler found (0) | 2019.03.28 |
---|---|
ORACLE PROCEDURE 쿼리 COMMIT 또는 ROLLBACK (0) | 2017.02.16 |
ORACLE FOR LOOP구문 (0) | 2017.02.16 |
ORACLE WHILE문과 LOOP문 (0) | 2017.02.16 |
ORACLE 프로시저 IF문과 EXCEPTION처리방법 (0) | 2017.02.16 |