0

是否可以将此 PL-SQL 代码转换为 unix 代码?

declare
   tipE varchar(8) := 'TEST';
begin
insert into TABLENAME VALUES (values);
   if tipExec = 'TEST' then
      dbms_output.put_line('INSERT is ok; called ROLLBACK in '' TEST');
      ROLLBACK;
   end if;

  exception
    when DUP_VAL_ON_INDEX then
      if tipE = 'TEST' then
         raise_application_error(-9999, 'DUPKEY in'' TEST');
      else
         raise;
      end if;
    when others then
      raise;
end;

可能吗?我的意思是我有一个参数“测试”或“产品”。我必须进行插入,如果此插入有 DUPKEY,我必须将其写入日志。否则我会在日志中写“INSERT is ok”。上面的代码几乎是相同的概念,但在 oracle 中。我在 unix shell 中需要这个。谢谢。

4

1 回答 1

0

在上面创建您的程序作为命名的 PL/SQL 过程,然后您可以轻松地通过 Unix shell 脚本从 sqlplus 调用它,如下所示:

sqlplus -s $USERPASS  << sqlend
    whenever sqlerror exit 1
    set heading off
    exec your_function('$example_variable');
sqlend

...其中 $USERPASS 是您的登录机制/用户和密码。如果您不使用任何函数参数,只需删除括号中的那个位。

查看此 Oracle 教程,了解如何从 PLSQL 代码片段创建过程的示例: http ://www.oracle.com/technetwork/issue-archive/2011/11-mar/o21plsql-242570.html

作为初学者,您的程序应如下所示(未经测试):

CREATE OR REPLACE PROCEDURE your_function
IS
   tipE varchar(8) := 'TEST';
begin
insert into TABLENAME VALUES (values);
   if tipExec = 'TEST' then
      dbms_output.put_line('INSERT is ok; called ROLLBACK in '' TEST');
      ROLLBACK;
   end if;

  exception
    when DUP_VAL_ON_INDEX then
      if tipE = 'TEST' then
         raise_application_error(-9999, 'DUPKEY in'' TEST');
      else
         raise;
      end if;
    when others then
      raise;
end your_function;
于 2013-07-23T20:35:27.637 回答