我正在研究一个pl sql存储过程.我需要做的是选择,使用游标,并为每个记录使用值构建一个字符串.最后,我需要将其写入文件.我尝试使用dbms_output.put_line("toto"),但缓冲区大小很小,因为我有大约1400万行.我从unix ksh调用我的程序.我正在考虑使用"假脱机"(在ksh方面)转储我的程序的结果,但我不知道该怎么做(如果这是可能的)
任何人有任何想法?
当我在命令行执行此操作时:
awk 'BEGIN{OFS=FS=","}$3~/^353/{print}' axeM10_20110510100219_59.DAT_353 >log
Run Code Online (Sandbox Code Playgroud)
它很好地执行vey而不花很多时间,并立即给我输出文件.
但是当我在shell脚本中包含它时:
#!/usr/bin/ksh
for i in *.DAT_353
do
awk 'BEGIN{OFS=FS=","}$3~/^353/{print}' ${i} > ${i}_changed >/dev/null
done
exit
Run Code Online (Sandbox Code Playgroud)
该脚本生成一个0字节的文件.我可以知道这里有什么问题吗?
我有一个用户输入的脚本,REFRESH选项是可选的.我需要测试以查看$ REFRESH是否存在并且等于字符串"REFRESH",如果它然后运行特定的代码块.
用户将执行
./export_data.sh <user> <type> [REFRESH]
Run Code Online (Sandbox Code Playgroud)
如果我在PHP中这样做我会简单地使用isset()函数,在ksh中是否存在等价?
我尝试了以下但是这次失败,因为在第二次测试中没有设置$ REFRESH:
if [ -n $REFRESH ] && [ $REFRESH == "REFRESH" ]
then
echo "variable is set and the expected value";
# do stuff
fi
Run Code Online (Sandbox Code Playgroud)
我能想到的另一种方法是嵌套if但是这看起来很乱:
if [ -n $REFRESH ]
then
if [ $REFRESH == "REFRESH" ]
then
echo "variable is set and the expected value";
# do stuff
fi
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
我正在使用KornShell(ksh)中的脚本.我的数据库连接是通过SQLPLUS连接到Oracle 9i数据库.我没有任何问题将DB值转换为shell变量,除了任何连续的空格被自动截断为只有一个字符.
这是我的代码示例:
MY_VAR=`sqlplus -s usr/pass@db << !
set heading off;
set pagesize 0;
select a_value from a_table where an_index = 25;
!`
Run Code Online (Sandbox Code Playgroud)
数据库中的实际数据如下:
Dec 15 09:19:10 <24:0070> User record (5 XATY 41839FG8 58775HK9AFF) is invalid for this condition
Run Code Online (Sandbox Code Playgroud)
我上面的代码示例返回如下:
Dec 15 09:19:10 <24:0070> User record (5 XATY 41839FG8 58775HK9AFF) is invalid for this condition
Run Code Online (Sandbox Code Playgroud)
间距对我正在使用的内容至关重要.
预先感谢您的帮助.
例如:
arr=([5]=5 [10]=10)
echo ${!arr[*]}
Run Code Online (Sandbox Code Playgroud)
Bash输出5 10但是ksh输出10 5?他们的意思不一样吗?
我有一个命令的多列文本输出,并希望一次打印一列,如:
#!/usr/bin/ksh
typeset -i i=0
while [[ $i -lt 5 ]]; do
<command 1> |awk '{print $i}' |<command 2>
i=$i+1
done
Run Code Online (Sandbox Code Playgroud)
我知道$i不是在awk中指定第i列的方法.这里的正确用法是什么?
比如,输出来自command 1:
"abc" "def" "ghi" "jkm"
"123" "456" "789" "0ab"
"erf" "fad" "dae" "kjh"
Run Code Online (Sandbox Code Playgroud)
该值不一定是3个字符长.这只是一个例子.
我希望依次将第1列放到第4列,供我们使用command 2.
我有一个包含以下内容的脚本:
db2 connect to user01
db2 describe indexes for table table_desc
Run Code Online (Sandbox Code Playgroud)
我想要的是执行第一行的过程与运行第二行的过程不同.这意味着执行第一行的进程获得连接,而运行第二行的第二个进程根本没有连接.这是经过验证的,因为我在第二行收到错误,说没有数据库连接.
是否可以使用相同的进程运行这两个命令?或者至少是一种将第一个过程"加入"到第二个过程的方法?
在如下的ksh-snippet中
iname=FA
USER_FA=xyz
USER_CS=test
TDUSER=USER_$iname
${!TDUSER}
Run Code Online (Sandbox Code Playgroud)
${!TDUSER}没有按预期工作.为什么?
在查看一些shell脚本时,我遇到了几个if语句实例,它们将一些正常变量与另一个包含在@()括号中的变量进行比较.
@(....)是否有一些特殊的含义,或者我错过了一些明显的东西?如果测试的示例:
if [[ ${VAR} != @(${VAR2}) ]]
Run Code Online (Sandbox Code Playgroud)
谢谢
如何在退出时和退出后抓住CTRL+ D键盘ksh?
while true; do
read cmd
echo $cmd
if [ "$cmd" = "?????" ]; then
break
fi
done
Run Code Online (Sandbox Code Playgroud)