我已经编写了一个 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/