Unix 在将值传递给 sql 语句时放置额外的空格/行

发布于 2024-10-21 13:06:28 字数 731 浏览 5 评论 0原文

我有一个像这样的 unix 脚本:

value1=`sqlplus -s ivr/ivr <<EOF  
set heading off;  
set feedback off;  
set linesize 500;  
set serveroutput on;  
set wrap off;  

SELECT FM.getSequence_n('$b_period', '$t_period', '$opr', '$fran', '$poi_s') 
  FROM DUAL;  

exit;  
EOF`  ,

参数作为用户的输入。当我使用“ksh -x filename.sh”在调试模式下运行脚本时,我注意到当 unix 脚本将值传递给 select 语句时,它会像这样中断它:

SELECT FM.getSequence_n('  
      2010/12/01 - 2010/12/31','  
      2010/12/01 - 2010/12/31','TTSLAP','UWAP','TTSL-LOC') 
  FROM DUAL

...这给出了错误的输出。当我使用 sqlplus 中传递的值运行相同的 sql 语句并将所有值放在一行中时,我得到正确的输出。

我需要知道为什么 UNIX 将语句分成多行以及如何将其删除。这一直让我做噩梦。首先,我认为值没有正确传递,这就是输出错误的原因。但只有 unix 在传递值时的换行才是错误的原因。请帮忙。

I have a unix script like this:

value1=`sqlplus -s ivr/ivr <<EOF  
set heading off;  
set feedback off;  
set linesize 500;  
set serveroutput on;  
set wrap off;  

SELECT FM.getSequence_n('$b_period', '$t_period', '$opr', '$fran', '$poi_s') 
  FROM DUAL;  

exit;  
EOF`  ,

The parameters are taken as input from the user. when i run the script in debug mode using 'ksh -x filename.sh' i notice that when the unix script is passing values to the select statement it breaks it like this:

SELECT FM.getSequence_n('  
      2010/12/01 - 2010/12/31','  
      2010/12/01 - 2010/12/31','TTSLAP','UWAP','TTSL-LOC') 
  FROM DUAL

...which gives the wrong output. When i run the same sql statement with the passed values in sqlplus with all the values in a single line i get the correct output.

I need to know why unix is breaking the statement into multiple lines and how can this be removed. This has been giving me nightmares. Firstly i was thinking that values were not being passed correctly that's why output was wrong . But only this linefeed by unix while passing values is the cause of error. Please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

还给你自由 2024-10-28 13:06:28

您的 $b_period$t_period 变量似乎包含换行符。如果它们是直接来自用户的输入,您确实应该在使用它们之前先进行一些输入验证

尝试类似的方法

filtered_b_period=`echo $b_period | sed 's/[^0-9\/]*//g'`
filtered_t_period=`echo $t_period | sed 's/[^0-9\/]*//g'`

也许您还应该添加进一步的检查,但至少您应该能够通过这种方式过滤掉不需要的字符。

It seems like your $b_period and $t_period variables contain newline characters. If they are input directly from users you really should do some input validation first before using them.

Try something like

filtered_b_period=`echo $b_period | sed 's/[^0-9\/]*//g'`
filtered_t_period=`echo $t_period | sed 's/[^0-9\/]*//g'`

Probably you should add further check as well, but at least you should be able to filter out unwanted characters this way.

夏末染殇 2024-10-28 13:06:28

变量的值包括换行符。做这样的事情来检查:

echo "$b_period" | hexdump -C

The values of your variables include newlines. Do something like this to check:

echo "$b_period" | hexdump -C
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文