select * from t where SID=sid; 语句问题,没有赋值语句;几:没有给变量或游标赋值。 是不能直接select 的
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;
select * from t where SID=sid; 语句问题,没有赋值语句;几:没有给变量或游标赋值。 【是不能直接select 的 】你只能用: select 字段 into 变量 from t where SID=sid; 或者 open 游标 for select * from t where SID=sid;动态语句也一样的。
传入的参数不要取值范围,只要数据类型就好了,sid in char
楼主,有2个错误 1、传入的参数不要写取值范围,只要数据类型 2、你的存储过程目的是什么,如果主体只是select * from t where SID=sid;不行,必须要有into子句,编译结果报PLS-00428错误:在此SELECT语句中缺少INTO子句
end 上面加个commit; 就OK了,就能编译通过了
+1 需加上 into赋值语句, 或者用游标
我修改成这样还会有错吗? 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;
select * from t where SID=sid;
语句问题,没有赋值语句;几:没有给变量或游标赋值。
是不能直接select 的
--包
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;
还有就是你的sid是传入的,要用
execute immediate v_sql我把char(2)改成varchar2还是报错。
语句问题,没有赋值语句;几:没有给变量或游标赋值。
【是不能直接select 的 】你只能用:
select 字段 into 变量 from t where SID=sid;
或者
open 游标 for
select * from t where SID=sid;动态语句也一样的。
1、传入的参数不要写取值范围,只要数据类型
2、你的存储过程目的是什么,如果主体只是select * from t where SID=sid;不行,必须要有into子句,编译结果报PLS-00428错误:在此SELECT语句中缺少INTO子句
+1
需加上 into赋值语句,
或者用游标
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;
你这有点捉急啊 传入的参数和你t表id类型一样就行了 该是什么就是什么,t表的name是number型的么,you know!