Oracle動態查詢語句是一類特殊的查詢語句,下面就為您詳細介紹Oracle動態查詢語句的語法,如果您對Oracle動態查詢方面感興趣的話,不妨一看。
1. 當使用EXECUTE IMMEDIATE語句處理單行查詢時,需要使用INTO子句接受返回數據:
- DECLARE
- query_stat VARCHAR2(100):='SELECT * FROM emp'||'WHERE empno=:eno';
- emp_record emp%ROWTYPE;
- BEGIN
- EXECUTE IMMEDIATE query_stat INTO emp_record USING &eno;
- dbms_output.put_line('姓名:'||emp_record.ename||',崗位:'||emp_record.job);
- END;
2. EXECUTE IMMEDIATE只能用於處理單行查詢,為了動態處理SELECT語句所返回的多行數據,需要定義游標變量,並使用OPEN-FOR, FETCH, CLOSE語句共同完成。具體步驟如下:
#1 定義游標變量:因為動態處理多行查詢需要使用游標變量完成,所以需要在定義部分定義游標變量,語法如下:
- TYPE cursortype IS REF CURSOR;
- cursor_variable cursortype;
#2 打開游標變量:打開游標變量會執行游標變量所對應的動態SELECT語句,並將查詢結果存放到游標結果集。語法如下:
- OPEN cursor_variable FOR dynamic_string
- [USING bind_argument];
#3 提取數據:提取數據用於將結果集中的行數據存放到PL/SQL變量,語法如下:
- FETCH cursor_variable INTO {VAR1};
#4 關閉游標變量:關閉游標變量用於釋放游標結果集,語法如下:
- CLOSE cursor_variable;
實例如下:
- DECLARE
- TYPE empcurtyp IS REF CURSOR;
- emp_cv empcurtyp;
- emp_record emp%ROWTYPE;
- sql_stat VARCHAR2(100);
- BEGIN
- sql_stat :='SELECT * FROM emp WHERE deptno=:dno';
- OPEN emp_cv FOR sql_stat USING &dno;
- LOOP
- FETCH emp_cv INTO emp_record;
- EXIT WHEN emp_cv%NOTFOUND;
- dbms_output.put_line('雇員名:'||emp_record.ename||',工資:'||emp_record.sal);
- END LOOP;
- CLOSE emp_cv;
- END;
以上就是Oracle動態查詢語句的用法介紹。