首页 > 解决方案 > 尝试在 Linux 中通过 shell 脚本向 oracle 数据库表插入记录时出错

问题描述

当我尝试运行参数为 20211007 的 shell 脚本 test.sh 时,谁能帮我解决这个错误代码如下:

#!/bin/sh

ODATE=${1}
file_source_sys="abc"
File_name="xyz"
file_deliver_time="20210218:12:56:76"

HOME_DIR="/var/tmp/Sneha"

source ~/env/INFORMATICA.env
source ${HOME_DIR}/db.properties

cd ${HOME_DIR}

cat <<EOD > temp.sql
INSERT INTO test VALUES 
('${file_source_sys}','${File_name}','${file_deliver_time}','$ODATE');

commit;

quit
EOD

sql ${USER}/\"${PASS}\"@${DB_INSTANCE} @temp.sql

错误如下:

SQLcl:2021 年 11 月 6 日星期六 18:53:24 发布 18.3 生产版 版权所有 (c) 1982, 2021,Oracle。版权所有。

上次成功登录时间:Sat Nov 06 2021 18:53:25 +01:00

连接到:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.11.0.0.0

从行开始的错误:1 File @ /var/tmp/Sneha/temp.sql 在命令中 - INSERT INTO test VALUES ('abc','xyz','20210218:12:56:76','20211005') 错误命令行:1 列:13 文件@/var/tmp/Sneha/temp.sql 错误报告 - SQL 错误:ORA-00942:表或视图不存在

提交完成。

从 Oracle Database 19c 企业版版本 19.0.0.0.0 断开 - 生产版本 19.11.0.0.0

注意我仔细检查并确认表 test 是在 DB 中创建的。此外,我手动检查了将生成的插入语句插入到数据库中,它工作正常。但是通过 Shell 脚本它没有发生。

我还看到 temp.sql 文件是用以下内容生成的:

插入测试值('abc','xyz','20210218:12:56:76','20211005');

犯罪;

退出

我不确定代码哪里出错了,因为我可以看到脚本成功连接到数据库,并且也正确地进行了提交和断开连接。

非常感谢您的帮助。非常感谢

标签: sqllinuxoracleshellsql-insert

解决方案


你确定你连接到正确的数据库,它说表'test'不存在,尝试这样做:

INSERT INTO DB_NAME.test VALUES (...);

推荐阅读