【问题标题】:Create a procedure in DB2在 DB2 中创建一个过程
【发布时间】:2015-12-11 19:49:57
【问题描述】:

我在 .sql 文件中使用 DB2 创建了一个简单的过程,并使用 Shell (Unix) 执行了该脚本。我收到一个错误:SQLSTATE 42601。

DB20000I  The SQL command completed successfully.
CREATE OR REPLACE PROCEDURE PROC_SAMPLE1()
BEGIN
update EMP set ENAME='ALLAIN' where EMPNO=7789
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "END-OF-STATEMENT" was found following "IN'
where EMPNO=7789".  Expected tokens may include:  "<psm_semicolon>".  LINE
NUMBER=3.  SQLSTATE=42601

有程序:

CREATE OR REPLACE PROCEDURE PROC_SAMPLE1()
BEGIN
update EMP set ENAME='ALLAIN' where EMPNO=7789;
END
/

【问题讨论】:

  • 请粘贴您使用的 UNIX 逗号。指定的语句终止符是什么?您需要使用“/”。
  • db2 -tvsf proc_file.sql

标签: shell db2 procedure


【解决方案1】:

如果这包含在文件中,您需要更改批处理终止符。由于 SP 行以; 结尾,批处理以/ 结尾,您需要在命令行中指定此项。

例如

db2 -td/ -f <your file>.sql

我喜欢使用#,因为它不会像/ 那样与unix shell 混淆。这里用文件中的#替换你的最后一个字符并使用-td#

【讨论】:

  • / 如何与 unix shell 混为一谈(不只是 #)?
  • @IanBjorhovde - 因为 / 在某些情况下用作转义字符
  • 你不是说`\`吗?
  • @IanBjorhovde - 我已经看到在不同的上下文中都用作转义字符。
  • 您见过/ 在 UNIX shell 中用作转义吗?
【解决方案2】:

我在创建过程之前添加了'--#SET TERMINATOR /',问题就解决了。

--#SET TERMINATOR /
CREATE OR REPLACE PROCEDURE PROC_SAMPLE1()
BEGIN
update EMP set ENAME='ALLAIN' where EMPNO=7789;
END
/

【讨论】:

  • 这可行,但请记住只有 DB2 命令行处理器 (CLP) 会解释 --#SET TERMINATOR x
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
相关资源
最近更新 更多