使用dbms_sql时是否可以从对象表中进行选择。native?我定义了一个对象:
CREATE OR REPLACE TYPE SI_O IS OBJECT(
S_ID NUMBER,
P_ID NUMBER,
G_ID NUMBER,
DLT VARCHAR2(255),
ERROR_ID NUMBER,
B_ID NUMBER
);
我还定义了一个对象表:
create or replace type SI_T is table of si_o;
现在我试着在这样的程序中使用它:
CREATE OR REPLACE PROCEDURE NATIVE_TEST IS
sqlCommand VARCHAR2(320);
tRows SI_T;
num BINARY_INTEGER:= -1;
l_ntt_desc_tab DBMS_SQL.DESC_TAB;
cur INTEGER;
cnt INTEGER;
nrowCnt INTEGER;
BEGIN
sqlCommand :=
' SELECT SI_O(S_ID, P_ID, G_ID, DLT, error_id,B_ID) FROM MYTABLE' ;
EXECUTE IMMEDIATE sqlCommand BULK COLLECT INTO tRows ;
sqlCommand := 'select count(*) cou from table(tRows)';
-- here is what I wish:
cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cur,sqlCommand,dbms_sql.native);
nrowCnt:=DBMS_SQL.EXECUTE(cur);
DBMS_SQL.CLOSE_CURSOR(cur);
END NATIVE_TEST;
然而,我得到运行时异常ora-00904“TROWS”无效标识符。这里的一切都很简单,但我真的希望使用dbms_sql。像这样的人(如果可能的话)。
1条答案
按热度按时间nkkqxpd91#
因此,trows是一个plsql表,它位于为plsql分配的内存中,而select只能对数据库中的对象进行操作。不需要运行SQL语句来获取PLSQL表的计数。你只是有trows。count属性,您可以在定义trows的pl/sql块中调用该属性。