我需要检查一个条件。即:
if (condition)> 0 then update table else do not update end if
我需要使用select into将结果存储到变量中吗?
例如:
declare valucount integer begin select count(column) into valuecount from table end if valuecount > o then update table else do not update
是的,你必须使用一个变量。您不能直接在PL / sql表达式中使用sql语句:
sql> begin 2 if (select count(*) from dual) >= 1 then 3 null; 4 end if; 5 end; 6 / if (select count(*) from dual) >= 1 then * ERROR at line 2: ORA-06550: line 2,column 6: PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ... ...
相反,你必须这样做:
sql> set serveroutput on sql> sql> declare 2 v_count number; 3 begin 4 select count(*) into v_count from dual; 5 6 if v_count >= 1 then 7 dbms_output.put_line('Pass'); 8 end if; 9 end; 10 / Pass PL/sql procedure successfully completed.
当然,您可能可以在sql中完成所有事情:
update my_table set x = y where (select count(*) from other_table) >= 1;
很难证明有些事情是不可能的。除了上述简单的测试用例,您可以查看syntax diagram的IF语句;您将不会在任何分支中看到SELECT语句。