我已经使用Oracle(10g.2)作为PHP程序员将近3年了,但是当我完成一项任务时,我第一次尝试使用ref游标和集合类型.当我遇到问题时,我在网上搜索过,这个ora-00932错误让我感到不知所措.我需要老手的帮助.
这是我一直在处理的问题,我想从表中选择行并将它们放在ref游标中,然后使用记录类型将它们收集在一个关联数组中.再次从这个关联数组中,创建一个引用游标.不要问我为什么,我正在写这么复杂的代码,因为我需要它来进行更复杂的分配.我可能会让你感到困惑,所以让我告诉你我的代码.
我在Toad的类型选项卡下定义了2种类型.其中一个是对象类型:
CREATE OR REPLACE
TYPE R_TYPE AS OBJECT(sqn number,firstname VARCHAR2(30), lastname VARCHAR2(30));
Run Code Online (Sandbox Code Playgroud)
另一个是使用上面创建的对象类型的集合类型:
CREATE OR REPLACE
TYPE tr_type AS TABLE OF r_type;
Run Code Online (Sandbox Code Playgroud)
然后我创建一个包:
CREATE OR REPLACE PACKAGE MYPACK_PKG IS
TYPE MY_REF_CURSOR IS REF CURSOR;
PROCEDURE MY_PROC(r_cursor OUT MY_REF_CURSOR);
END MYPACK_PKG;
Run Code Online (Sandbox Code Playgroud)
包装体:
CREATE OR REPLACE PACKAGE BODY MYPACK_PKG AS
PROCEDURE MY_PROC(r_cursor OUT MY_REF_CURSOR) AS
rcur MYPACK_PKG.MY_REF_CURSOR;
sql_stmt VARCHAR2(1000);
l_rarray tr_type := tr_type();
l_rec r_type;
BEGIN
sql_stmt := 'SELECT 1,e.first_name,e.last_name FROM hr.employees e ';
OPEN rcur FOR sql_stmt;
LOOP
fetch …Run Code Online (Sandbox Code Playgroud)