不要用char,改为varchar2
还有就是你的sid是传入的,要用
execute immediate v_sql

解决方案 »

  1.   

    这句代码引起报错
    select * from t where SID=sid;
      

  2.   

    select * from t where SID=sid;
    语句问题,没有赋值语句;几:没有给变量或游标赋值。
    是不能直接select 的
      

  3.   

    oracle的存在过程要把结算赋给一个变量的,如果返回的是一个结合可以用游标接收
    --包
    create or replace package mypk  as  type t_cursor is ref cursor;  procedure proc(name varchar2,c out t_cursor,a number);  end; 2)
    --包体
    create or replace package body mypk  as  procedure proc(name varchar2,c out t_cursor,a number)  as   begin  open c for select * from test where id=a and namename=name;  end proc;  end;  
      

  4.   

    不要用char,改为varchar2
    还有就是你的sid是传入的,要用
    execute immediate v_sql我把char(2)改成varchar2还是报错。
      

  5.   

    select * from t where SID=sid;
     语句问题,没有赋值语句;几:没有给变量或游标赋值。
     【是不能直接select 的 】你只能用:
     select 字段 into 变量 from t where SID=sid;
    或者
    open 游标 for
        select * from t where SID=sid;动态语句也一样的。
      

  6.   

    传入的参数不要取值范围,只要数据类型就好了,sid in char
      

  7.   

    楼主,有2个错误
    1、传入的参数不要写取值范围,只要数据类型
    2、你的存储过程目的是什么,如果主体只是select * from t where SID=sid;不行,必须要有into子句,编译结果报PLS-00428错误:在此SELECT语句中缺少INTO子句
      

  8.   

    end 上面加个commit; 就OK了,就能编译通过了
      

  9.   


    +1
    需加上 into赋值语句,
    或者用游标
      

  10.   

    我修改成这样还会有错吗?
    create or replace procedure rk
    (
       isb in t.ID%type
    )
    as
    i number;
    begin
      select NAME into i from t where ID=isb;
      Dbms_Output.put_line(i);
    end;
      

  11.   


    你这有点捉急啊 传入的参数和你t表id类型一样就行了 该是什么就是什么,t表的name是number型的么,you know!