oracle - PL/SQL 的返回值
问题描述
所以,我们有一个 shell 脚本,它需要调用一个匿名块,并接收一个返回的值。匿名块大约有 100 行,所以我们将它放在一个文件中,因此对于 SQL*Plus,它被称为:
@/directory_path/anonymous_block "'param1'" "'param2'"
是的,我们传递了几个参数。最后,我们有一个DBMS_OUTPUT.PUT_LINE.......
那么,我们的问题是,如何将其返回给壳牌?我们尝试了各种类似的代码:
proc=TEMPLATE1_MV<BR>
code=513
x=`print "
set heading off feedback off verify off timing off
@/u01/sql/stock_rpt_stats '$code' '$proc';
exit" | sqlplus -s $user/$pass`
y=`echo $x | awk '{print $1}'`<BR>
printf "HERE: $y\n"
但没有运气,只有错误。
如果这仅包含一个直接 SQL:
SELECT TRUNC(SYSDATE) FROM dual;
这可以正常工作,但不引用包含 SQL 的文件。
任何有一些想法的人都会很棒。提前致谢。
解决方案
您是否尝试添加SET SERVEROUTPUT ON
?
我通常更喜欢sqlplus
使用heredoc方法运行并将块的结果传递给这样的变量,它对我来说很好。
scripts-$cat ./sqlplus_exec.sh
#!/bin/bash
output=$(sqlplus -s $user/$pass <<INP
set heading off feedback off verify off timing off
set serveroutput on
@print_output.sql
INP
)
echo "$output"
这是SQL文件
scripts-$cat print_output.sql
BEGIN
DBMS_OUTPUT.PUT_LINE('HELLO WORLD');
END;
/
scripts-$./sqlplus_exec.sh
HELLO WORLD
推荐阅读
- python - 在 Pandas 中将索引连接到 MultiIndex
- powershell - 保留文件名中的初始字符,使用 powershell 删除所有剩余字符
- exec - 将包含 COALESCE 的动态 sql 语句的结果分配给变量
- python - 从python的内存对象中获取原始数据类型
- java - 未知 NullPointerException 10 忽略>
- statistics - 按时间段过滤的类别加权平均值
- html - @media 查询在 Chrome 或 Safari iOS 中不起作用
- javascript - 如何根据文本而不是类单击按钮
- dll - sqlite3 extension-functions:找不到指定的模块
- python - 为什么我对 QCheckBox.hitButton 的重新实现仅适用于检查指示器的一小部分区域?