我看看你的功能,这样就可以了,为什么要写成动态语句。
create or replace procedure p_1
is
i_count number;
begin
select count(*) into i_count from table_a ;
end p_1;
create or replace procedure p_1
is
i_count number;
begin
select count(*) into i_count from table_a ;
end p_1;
在动态语句中i_count变量这样引用是否有错?
N_CID INTEGER;
N_RET INTEGER;
N_NR NUMBER;
BEGIN
N_CID := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(N_CID, SQL_STR, DBMS_SQL.V7);
DBMS_SQL.DEFINE_COLUMN(N_CID, 1, N_NR);
N_RET := DBMS_SQL.EXECUTE(N_CID);
IF DBMS_SQL.FETCH_ROWS (N_CID) >0 THEN
DBMS_SQL.COLUMN_VALUE(N_CID,1,N_NR);
END IF;
DBMS_SQL.CLOSE_CURSOR(N_CID);
RETURN N_NR;
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(N_CID);
RETURN NULL;
END;