linux - 无法执行更新 oracle 表

标签 linux oracle shell

我已经编写了一个 shell 脚本,我试图在其中更新 oracle 表,而在更新表时我遇到了以下错误,另一方面,当我使用给定的硬编码值执行时它工作正常。

代码

    DAT_SUPPL_ID='21'
    PA_OLT_CD='32'
    DT_PY_FD_TY='43'
    DT_FL_MTH='M201565'

    sqlplus -silent XXX/YYY@UDF <<!

    UPDATE HX_DT_PUC_DOL SET PROC_STA_TS=SYSTIMESTAMP,PROC_ID=1 WHERE DT_SPPL_INT_ID='${DAT_SUPPL_ID}' AND PH_CD='${PA_OLT_CD}' AND DAT_PY_FD_TY='${DT_PY_FD_TY}' AND DT_FLE_MONTH='${DT_FL_MTH}'
exit;
!

错误:

UPDATE HX_DT_PUC_DOL SET PROC_STA_TS=SYSTIMESTAMP,PROC_ID=1 WHERE DT_SPPL_INT_ID='21' AND PH_CD='1981808' AND DAT_PY_FD_TY='1' AND DT_FLE_MONTH='M200911'
                                                                                                                                          *                                             
ERROR at line 1:
ORA-00942: table or view does not exist

工作代码

       sqlplus -silent XXX/YYY@UDF <<!

UPDATE HX_DT_PUC_DOL SET PROC_STA_TS=SYSTIMESTAMP,PROC_ID=1 WHERE DT_SPPL_INT_ID='21' AND PH_CD='1981808' AND DAT_PY_FD_TY='1' AND DT_FLE_MONTH='M200911'
!

最佳答案

sql结束后加分号

-bash-4.2$ sqlplus hr/hr

SQL*Plus: Release 11.2.0.2.0 Production on Tue Apr 10 15:40:04 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> create table test_table (col1 date, col2 number, col3 number, col4 varchar2(30));

Table created.

SQL> insert into test_table (col1,col2,col3,col4) values (sysdate, 1,1234,'@T!ger');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test_table;

COL1                     COL2       COL3 COL4
------------------ ---------- ---------- ------------------------------
10-APR-18                   1       1234 @T!ger

SQL> exit


#!/bin/sh
test_num1='1234'
test_char2='@T!ger'

sqlplus  hr/hr <<!

    UPDATE TEST_TABLE SET col1=SYSDATE , col2=4  WHERE col3='${test_num1}' AND col4='${test_char2}' ;
    commit;
    exit;
!

bash-4.2$ ./test_sql.sh

SQL*Plus: Release 11.2.0.2.0 Production on Tue Apr 10 16:11:08 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> SQL>
1 row updated.

SQL>
Commit complete.

SQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

没有的sql;

bash-4.2$ ./test_sql.sh

SQL*Plus: Release 11.2.0.2.0 Production on Tue Apr 10 16:16:30 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> SQL>   2      exit
    *
ERROR at line 2:
ORA-00933: SQL command not properly ended


SQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

bash-4.2$ more test_sql.sh
#!/bin/sh
test_num1='1234'
test_char2='@T!ger'

sqlplus  hr/hr <<!

    UPDATE TEST_TABLE SET col1=SYSDATE , col2=4  WHERE col3='${test_num1}' AND col4='${test_char2}'
    exit;
!

关于linux - 无法执行更新 oracle 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49756873/

相关文章:

linux - 在 redhat linux 上安装 docker - 出现 'container-selinux' 和 'selinux-policy' 问题

sql - 右表的左连接与 where 子句(必须从右返回 NULL) - Oracle

linux - 使用 'ls -F'时不同指标的含义

linux - 查找超过某个大小的所有文件并截断​​?

database - ROWID (oracle) - 它有什么用吗?

php - 调用 shell 命令的脚本在 CLI 中工作,而不是在 Web 上下文中工作

linux - 通过 Rightscripts 安装 OpenCV 和 FFMPEG 时出错

C++ linux可执行文件不断尝试使用不存在的库

linux - fish、zsh、bash 可以导入同一个配置文件吗?

java - 在 URL 中,orgId、UserId 和 User 没有出现在 R12 中