我可以在存储过程中使用 if 语句将值插入到表中吗?
Posted
技术标签:
【中文标题】我可以在存储过程中使用 if 语句将值插入到表中吗?【英文标题】:Can I use if statements in a stored procedure to insert values into a table? 【发布时间】:2016-04-22 15:43:29 【问题描述】:我正在尝试编写一个存储过程来选择 indiv_ids 和 transaction_ids 并将它们插入到我的架构上的表中。在这样做时,我想传入变量并让存储过程使用 if 语句根据传入的信息从不同的表中选择 indiv_ids 和 transaction_ids。我尝试了一些变体,但无法让过程工作没有错误。谢谢!
create or replace procedure myproc (name_type in varchar2, dept in number)
is begin
if name_type='promo' then insert into mytable(indiv_id,transaction_id)
---sql here;
commit;
elsif name_type='deal' then insert into mytable(indiv_id, transaction_id)
---sql here;
commit;
end if;
end;
errors: Error(8,10): PL/SQL: SQL Statement ignored,
Error(16,31): PL/SQL: ORA-00942: table or view does not exist
【问题讨论】:
First if 语句丢失 end if @NaughtyNinja 感谢您的评论。我试过单独的 if 语句,它没有改变任何东西。使用当前语法,我会忽略 SQL 语句,并且表或视图不存在错误。如果我分解 if 语句,仍然不会发生 您应该将遇到的错误堆栈添加到问题中。如果您在评论中收到错误,则mytable
或您查询的表之一不存在;或者您无权从程序中访问它。您是否拥有所涉及的所有表,或者是否在其他模式中(通过同义词或通过设置 current_schema
或使用模式限定名称访问)?
@AlexPoole 错误(28,12):PL/SQL:SQL 语句被忽略错误(36,31):PL/SQL:ORA-00942:表或视图不存在。我得到的错误。我最初以为是关于权限的,但我使用我不拥有的表创建了一个简单的测试过程,并且确实能够创建该过程。
请将错误堆栈添加到问题中。也许你只是拼错了一个表名。您使用另一个程序检查权限,而不是匿名块?我们看不到您的架构、权限或查询,因此无法为您缩小范围。不过,这与 if
构造无关。
【参考方案1】:
注意name_type
变量被声明为NUMBER
,但在过程体中它与字符串进行比较:
if name_type='promo' then
这不是 ORA-00942 错误的原因,但无论如何它会使您的程序无法正常工作。
【讨论】:
抱歉,在我当前的查询中是 varchar2。以上是关于我可以在存储过程中使用 if 语句将值插入到表中吗?的主要内容,如果未能解决你的问题,请参考以下文章