Oracle 我可以在存储过程中使用if语句将值插入表中吗?

Oracle 我可以在存储过程中使用if语句将值插入表中吗?,oracle,if-statement,stored-procedures,plsql,Oracle,If Statement,Stored Procedures,Plsql,我试图编写一个存储过程,选择Indivu_ID和transaction_ID,并将它们插入到模式的表中。在这样做时,我希望传入变量,并让存储过程使用if语句根据传入的信息从不同的表中选择indiv_id和transaction_id。我尝试了一些变体,但无法使程序正常工作而不出错。谢谢 create or replace procedure myproc (name_type in varchar2, dept in number) is begin if name_type='prom

我试图编写一个存储过程,选择Indivu_ID和transaction_ID,并将它们插入到模式的表中。在这样做时,我希望传入变量,并让存储过程使用if语句根据传入的信息从不同的表中选择indiv_id和transaction_id。我尝试了一些变体,但无法使程序正常工作而不出错。谢谢

 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

请注意,
name\u type
变量声明为
NUMBER
,但在过程体中,它与字符串进行比较:

if name_type='promo' then

这不是ORA-00942错误的原因,但无论如何,它会使您的过程无法正常工作。

First if语句缺少endif@NaughtyNinja谢谢你的评论。我尝试过使用独立的if语句,但它并没有改变任何东西。使用当前语法,我将忽略SQL语句,并且表或视图不存在错误。如果我分解if语句,则仍然不会发生任何错误。您应该添加问题的错误堆栈。如果您的注释中出现错误,则
mytable
或您查询的某个表不存在;或者您无法通过过程访问它。您是否拥有所有涉及的表,或者是其他模式中的一些表(通过同义词或通过设置
当前模式
或使用模式限定名访问)?@AlexPoole Error(28,12):PL/SQL:SQL语句忽略错误(36,31):PL/SQL:ORA-00942:表或视图不存在。我得到的错误。我最初认为这是关于权限的,但我使用我不拥有的表创建了一个简单的测试过程,并且确实能够创建该过程。请将错误堆栈添加到问题中。也许你刚刚拼错了一个表名。是否使用另一个过程而不是匿名块检查权限?我们无法查看您的架构、权限或查询,因此无法为您缩小范围。不过,这与
if
构造无关。很抱歉,在我当前的查询中是varchar2。