例子,处理单行查询: DECLARE sql_stat VARCHAR2(100); emp_record tbl%ROWTYPE; BEGIN sql-stat:='SELECT * FROM tbl WHERE tblno=:no'; EXECUTE IMMEDIATE sql_stat INTO emp_record USING &1; dbms_output.put_line(emp_record.enameemp_record.sal); END; /
2 使用OPEN-FOR,FETCH 和 CLOSE 语句处理多行查询
动态处理SELECT语句步骤:定义游标->打开游标->循环提取数据->关闭游标 定义: TYPE cursortype IS REF CURSOR; cursor_variable cursortype; 打开: OPEN cursor_variable FOR dynamic_string [USING bind_argument[,bing_argument]...]; 提取: FETCH cursor_variable INTO {var1[,var2]... recor_var}; 关闭: CLOSE cursor_variable;
显示特定部门雇员姓名和工资 DECLARE TYPE empcurtype IS REF CURSOR; emp_cs empcurtype; emp_record emptable%ROWTYPE; sql_stat VARCHAR2(100); BEGIN sql_stat:='select * from emptable where deptno=:dno'; OPEN emp_cs FOR sql_stat USING &dno; LOOP FETCH emp_cs INTO emp_record; EXIT WHEN emp_cs%NOTFOUND; dbms_output.put_line(emp_record.enameemp_record.sal); END LOOP; CLOSE emp_cs; END; /