在oracle中创建过程时遇到几个错误

时间:2014-07-18 10:37:47

标签: oracle stored-procedures

我是oracle的新手,我正在尝试在oracle中创建一个具有select查询的程序 内部更新查询。基于我传递给过程的ID,它应首先执行select语句并将结果传递给本地声明的变量,我通过发送变量值来更新表; 这是一个例子:

CREATE OR REPLACE PROCEDURE DB_TEMP.SP_INSERT_PROF (PID in number)
AS
V1    number;
V2    VARCHAR2(250 BYTE);
V3  VARCHAR2(100 BYTE);
V4 VARCHAR2(100 BYTE);
Begin
Select  R1 into v1, r2 into v2, (select * from (select  r3 into v3 from table2 where C1=PID) rownum=1),
R4 into v4 from table1 where c2=PID;
If PID is not null then
Begin
Update result_table set R1=v1,r2=v2,r3=v3,r4=v4 where c3=PID;
End if;
End;
/

当我尝试保存时,我收到以下错误:

1)PL / SQL:ORA-00923:未找到FROM关键字 这个错误我在R2查询到v2之前进入命令 2)忽略SQL语句 我在更新命令时得到了这个 3)遇到符号" IF"当期待以下之一时:    ; 如果命令,我正在结束。

有人可以帮我解决这个问题吗? 谢谢, 阿尼尔

1 个答案:

答案 0 :(得分:0)

您的select应该有一个into,而不是每个值一个begin。而且,if中还有end个额外的CREATE OR REPLACE PROCEDURE DB_TEMP.SP_INSERT_PROF (PID in number) AS v1 number; v2 varchar2(250 BYTE); v3 varchar2(100 BYTE); v4 varchar2(100 BYTE); begin select r1, r2, ( select r3 from (select r3 from table2 where c1=PID order by c2 desc) where rownum=1), r4 into v1, v2, v3, v4 from table1 where c2=PID; if PID is not null then update result_table set r1=v1, r2=v2, r3=v3, r4=v4 where c3=PID; end if; end; / ,您不会使用自己的if完成。所以它应该是:

select

但是如果PID为空,似乎允许来自table1,那么c2就不会在r3中找到任何行,所以你就可以了得到一个没有数据的异常。如果{{1}}不是唯一的,那么您可能会遇到太多行异常。而获取{{1}}的子选择可能可以作为连接来完成。

您也不需要单独选择和更新;你可以做一个相关的更新,并完全避免使用PL / SQL,但这有点超出了问题的范围。

正如评论者所说,这些都是非常基本和基本的东西,所以你应该确保你理解它是如何工作的,refer to the documentation或者是一个入门教程 - 在文档和文档中都有很多例子。通过互联网。