oracle存储过程select语句必须带into吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle存储过程select语句必须带into吗相关的知识,希望对你有一定的参考价值。
存储过程select语句必须带into吗
好像sql server可以啊。我看到的例子:
CREATE PROCEDURE dbo.GetProductsByCategory ( @CategoryID int ) AS SELECT * FROM Products WHERE CategoryID = @CategoryID怎么回事
oracle存储过程select语句必须带into。因为要将查询结果放到变量中,如以下存储过程:
create or replace procedure p_testas
v_begintime varchar2(20);
v_endtime varchar2(20);
v_str varchar2(10);
begin
v_begintime:=to_char(sysdate,\'yyyy-mm-dd hh24:mi:ss\');
select \'badkano\' into v_str from dual;
v_endtime:=to_char(sysdate,\'yyyy-mm-dd hh24:mi:ss\');
dbms_output.put_line(\'开始时间为:\'||v_begintime);
dbms_output.put_line(\'结束时间为:\'||v_endtime);
end;
其中select \'badkano\' into v_str from dual;此句就是将“badkano”放入变量“v_str”中。
所以必须使用INTO子句返回一个结果,以便在存储过程中使用它。追问
好像sql server可以啊。我看到的例子:
CREATE PROCEDURE dbo.GetProductsByCategory ( @CategoryID int ) AS SELECT * FROM Products WHERE CategoryID = @CategoryID怎么回事
sqlserver没接触过啊,不过我想,那大概是获取结果集的方法。
在ORACLE中不能如此获得结果集,所以不一样的。
如果想得到 结果的话 可以 在查询前 使用 open result for 查出结果追问
好像sql server可以啊。我看到的例子:
CREATE PROCEDURE dbo.GetProductsByCategory ( @CategoryID int ) AS SELECT * FROM Products WHERE CategoryID = @CategoryID怎么回事
SELECT * FROM "T_SBRECORD_copy" WHERE SB_ID=(SELECT SB_ID FROM "T_SBRECORD_copy" WHERE SB_ID=spName);追问
其实是提示:
select * from T_SBRECORD_copy where sb_id=vv那句错误
对了,是想用存储过程返回一张表吗?
那把select * from T_SBRECORD_copy where sb_id=vv这句改成:
exec("select * from T_SBRECORD_copy where sb_id="+vv)
oracle 在sql>状态下 执行insert into select 正常 将这一段复制到存储过程中 再EXEC 就很慢
就是说在一般的命令窗口中insert into select 很正常
但是将这段sql写到存储过程中(包含其他内容)
然后执行存储过程就非常慢(注释掉正常)
数据库是有归档的
现采取其他的方式间接解决了
一般来说,既然写了存储过程就不要用这种简写语句,这种写法通用性低,效率也低。 参考技术A 可以描述的清楚一点吗?
以上是关于oracle存储过程select语句必须带into吗的主要内容,如果未能解决你的问题,请参考以下文章
关于oracle存储过程select into 未找到数据问题
关于oracle存储过程select into 未找到数据问题
请教关于oracle中写存储过程时 select into 语句报错的问题
oracle 中SQL 语句开发语法 SELECT INTO含义
oracle 在sql>状态下 执行insert into select 正常 将这一段复制到存储过程中 再EXEC 就很慢