CREATE OR REPLACE FUNCTION SP_GET_LIST
(
     po_cursor     out     hstype.t_cursor      --返回游标
)
RETURN NUMBER
AS
BEGIN
  OPEN po_cursor FOR SELECT * FROM TABLE1;
    v_sql := 'DELETE  FROM TABLE1 WHERE COL = 1';
  EXECUTE IMMEDIATE v_sql;
  --执行该语句没有报错,数据库删除成功
  return 0;END
/

解决方案 »

  1.   

    大虾并不是我没有在过程后加分号或斜杠,是内部SQL语句错误。等待
      

  2.   

    'OPEN po_cursor FOR SELECT * FROM TABLE1'
    不是sql语言是pl/sql语言
      

  3.   

    v_sql := 'OPEN po_cursor FOR SELECT * FROM TABLE1';
      EXECUTE IMMEDIATE v_sql;
    =>
    OPEN po_cursor FOR SELECT * FROM TABLE1
    不过我还是不明白你的意思
      

  4.   

    我不知道你为什么用动态SQL,但我估计你是想把满足条件的删掉,再返回删除后的结果,你不要用动态SQL打开游标试试。改成下面:CREATE OR REPLACE FUNCTION SP_GET_LIST
    (
         po_cursor     out     hstype.t_cursor      --返回游标
    )
    RETURN NUMBER
    AS
      v_sql        VARCHAR2(500);
    BEGIN
      --v_sql := 'OPEN po_cursor FOR SELECT * FROM TABLE1';
      --EXECUTE IMMEDIATE v_sql;
      --执行上面语句总是报错误的SQL
      --但是我用下面的语句就可以
      v_sql := 'DELETE  FROM TABLE1 WHERE COL = 1';
      EXECUTE IMMEDIATE v_sql;
      --执行该语句没有报错,数据库删除成功
      --return 0;
      OPEN po_cursor FOR SELECT * FROM table1;
    END
    /