2017-02-25 63 views
0

我为我的应用程序使用ORACLE 10g & PHP codeigniter。 我有这样定义的过程: -如何操作ORACLE SQL PROCEDURE中的“if condition”?

CREATE OR REPLACE PROCEDURE 
     insertMovie (id IN NUMBER, title IN VARCHAR2, 
      sdate IN DATE, edate IN DATE, 
         image IN VARCHAR2, add_date IN DATE, 
      message OUT NUMBER) 
    AS 
     BEGIN 
      INSERT INTO tbl_movie (movie_id, movie_title, movie_sdate, movie_edate, movie_image, movie_add_date) 
      VALUES (id, 'title', to_date('sdate', 'yyyy-mm-dd hh24:mi:ss'), to_date('edate', 'yyyy-mm-dd hh24:mi:ss'), 'movie_image', to_date('add_date', 'yyyy-mm-dd hh24:mi:ss')); 
      message:= 1; 
     END; 
/

现在,我想,如果条件返回1或0。如果插入会成功,消息将是1,如果插入失败。消息将为0.

我该怎么做?

回答

0

可以使用EXCEPTION块陷阱在执行proc和设置信息为0

CREATE OR REPLACE PROCEDURE 
     insertMovie (id IN OUT NUMBER, title IN VARCHAR2, 
      sdate IN DATE, edate IN DATE, 
         image IN VARCHAR2, add_date IN DATE, 
      message OUT NUMBER) 
    AS 
     BEGIN 
      IF ID is NULL THEN 
       ID := SOME_SEQUENCE.NEXTVAL; 
      END IF; 
      INSERT INTO tbl_movie (movie_id, movie_title, movie_sdate, movie_edate, movie_image, movie_add_date) 
      VALUES (id, 'title', to_date('sdate', 'yyyy-mm-dd hh24:mi:ss'), to_date('edate', 'yyyy-mm-dd hh24:mi:ss'), 'movie_image', to_date('add_date', 'yyyy-mm-dd hh24:mi:ss')); 
      message := 1; 
     EXCEPTION 
      WHEN OTHERS THEN 
      message := 0; 
     END; 
/
+0

我怎样才能返回最后插入movie_id如果插入成功发生任何异常? – Saswat

+0

你只是将id传递给proc。因此,您可以检查消息是否为1,然后使用您传递给过程的标识。 – GurV

+0

对不起,其实我是这个意思。在这里我明确地传递了ID,所以我可以使用它。如果我一直在使用sequence.next_val,该怎么办?那一次我需要返回ID .. – Saswat