oracle - 我正在尝试在 shellscript 中执行 PL/SQL 块。但是在执行脚本时,out 变量会抛出 DB 结果和垃圾值
问题描述
if [ $returncode -eq 0 ]
then
query_msg=`$ISQL -S $USERNAME/$PASSWD@$SERVICENAME <<EOJ
set serveroutput on;
set heading off;
set feedback off;
set linesize 150;
declare
out_value varchar2(32767);
BEGIN
SELECT MESSAGE into out_value FROM RED.ERROR_LOG WHERE PROC = 'colour' and
to_char(to_date(DT,'DD-MON-YY')) = to_char(to_date(sysdate,'DD-MON-YY'));
dbms_output.put_line(out_value);
END;
/
EOJ`
echo $query_msg > $DATADIR/colour_DB.log
在那个日志中我沿着垃圾值获取查询结果?在 plsql 块中声明变量时我遗漏了一些东西?有人可以帮我吗?
查询结果:-
+query_msg=$'declare\n*\nERROR at line 1:\nORA-01403: no data found\nORA-06512: at line 5'
+ echo declare 0 1 221.log 132.log 321.log 456.log --> these are the files in the server path(unwanted result).
解决方案
在 shell 中,*
扩展为当前目录中的文件列表,因此echo *
将生成您所看到的文件列表。
SQL*Plus 的 PL/SQL 块的输出类似于:
declare
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 5
因此echo $query_msg
将打印该单词declare
后跟当前目录中的文件列表,然后是消息的其余部分。
为防止这种情况,请将其放在软引号中:
echo "$query_msg"
或者使用 SQL*Plusspool
命令捕获文件中的原始文本,这也将保留格式。
推荐阅读
- java - java.sql.SQLException:未知系统变量“query_cache_size”,尽管拥有最新的 JDBC
- c# - 使用 AngleSharp 跟随重定向到本地主机
- spring - 如何使用 xml 配置在 Spring 2.5 Web 应用程序中配置两封电子邮件
- sql - NVL 和 GROUP BY 子句的问题
- powershell - *在* Enter-PSSession 之后将文件复制到本地计算机
- apache-spark - Apache Spark - 如何在事件时间使用窗口操作设计自己的聚合
- docker - 获取 x509:从 jenkins(dind 代理)与 docker 注册表交谈时由未知权威签署的证书
- mysql - 为什么双引号会影响比较日期时间的结果?
- javascript - 为什么当输入是文本时 document.getelementbyid().value 对我不起作用
- pyspark - pyspark 上的 MCC(马修斯相关系数)