请教脚本编写和产品执行标准编写的问题

查看: 5628|回复: 5
请教,SQL条件中OR前后语句的执行问题
论坛徽章:0
请教一下,在SQL语句的WHERE条件中,有OR语句的话,OR语句的前后判断是否一定会全部执行?或者是从左向右执行,只要有一个条件满足,则不再计算后续条件的值。
比如,select * from table1 where @var1='1' or instr(@var1, field1)&0
这个语句中,实际上我需要做的是,如果变量@var1等于'1',则不用判断字段field1中是否包含@var1了;否则,则需要判断。
在这个语句中,因为表中有很多记录,如果or条件的前后都执行的话,则存在每一条记录都要判断。如果是从左到右判断的,则前一条件为true后就不用检查字段的值了,应该会快很多。
不知道倒底是怎么执行的。
论坛徽章:0
用union all替代or行不行啊
[ 本帖最后由 elieen0315 于
12:45 编辑 ]
论坛徽章:6
select * from
select t.*,
& & & & & & & & & & & &&&case
& & & & & & & & & & & && & when @var1='1' then 1;
& & & & & & & & & & & && & when instr(@var1, field1)&0 then 1;
& & & & & & & & & & & && & else 0;
& & & & & & & & & & & &&&end temp1
from table t
) where temp1 = 1
论坛徽章:0
可能我的意思描述得还不是很清楚。
实际上我是在做某张表的查询中,有很多查询条件,这些条件是动态的,也就是说如果这些条件有输入值,则应作为SQL语句中的WHERE条件加入判断,以过滤记录;如果这些条件没有输入值,则根本就不对相应的字段作过滤了。
所以,在SQL语句的WHERE条件中,我想实现的就是在处理时先判断是否变量有值传入,有传入就对字段的过滤条件起作用;否则这一个字段的过滤条件不起作用。
我在这一字段过滤的条件中,使用OR的逻辑运行符,前面是变量判断,后面是字段过滤,执行时是不是首先检查变量判断是否为TRUE,如果为真的话,是不是就直接忽略了这个字段的过滤语句,因为此时OR条件的两边已经有一边为TRUE了。
我现在担心的就是在OR运行符下,会不会无论前面的变量判断是否为TRUE,后面的字段过滤都要执行一下判断,这会导致浪费了处理性能,多进行了字段的检索处理。
论坛徽章:0
意思是不是:
select * from table1 where @var1='1' or&&(@var1='0'&&and instr(@var1, field1)&0);
或者可以用动态语句拼接where条件:
whereSTR=&&;
if&&@var1='1'&&then
& & whereSTR=&@var1='1' &;
whereSTR=&instr(@var1, field1)&0&;
论坛徽章:483
原帖由 hslch 于
13:32 发表
可能我的意思描述得还不是很清楚。
实际上我是在做某张表的查询中,有很多查询条件,这些条件是动态的,也就是说如果这些条件有输入值,则应作为SQL语句中的WHERE条件加入判断,以过滤记录;如果这些条件没有输入值,则根本就不对相应的字段作过滤了。
所以,在SQL语句的WHERE条件中,我想实现的就是在处理时先判断是否变量有值传入,有传入就对字段的过滤条件起作用;否则这一个字段的过滤条件不起作用。
我在这一字段过滤的条件中,使用OR的逻辑运行符,前面是变量判断,后面是字段过滤,执行时是不是首先检查变量判断是否为TRUE,如果为真的话,是不是就直接忽略了这个字段的过滤语句,因为此时OR条件的两边已经有一边为TRUE了。
我现在担心的就是在OR运行符下,会不会无论前面的变量判断是否为TRUE,后面的字段过滤都要执行一下判断,这会导致浪费了处理性能,多进行了字段的检索处理。
OR是按顺序求值的,一旦满足条件就会中止,因此不会出现你担心的情况,但是有可能本来可以用索引的查询现在却用不上,因为ORACLE只会生成一种查询计划。要得到最佳计划就是根据输入动态生成SQL, 但这里面有个绑定变量的问题, 因为变量个数不定比较难处理,可以用SYS_CONTEXT或DBMS_SQL的办法。
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号请教个问题,远程脚本执行nohup的问题【linux吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:177,002贴子:
请教个问题,远程脚本执行nohup的问题收藏
初学linux,工作需要写个脚本,涉及到远程调用脚本,执行nohup后不继续执行的问题,具体如下:A机器:192.168.0.1B机器:192.168.0.2A机器上脚本a.sh:ssh root "cd /;sh b.sh"echo “finish"B机器上脚本/b.sh:nohup sh c.sh &echo "start c.sh"#c.sh是一个需要长时间执行的脚本在A上开个终端,执行脚本a.sh:终端中显示完start c.sh 后,终端就停下来无响应,我摁ctrl+c后,才执行a脚本的后续命令,就是显示 "finish"另外在B机器上的c.sh进程在后台正常运行。请问问题出现的原因,以及希望改成不输入ctrl+c也能自动执行的方法谢谢
阿里云云市场镜像可以一键部署云服务器所需要的运行环境和个性化的软件应用满足建站,应用开发,可视化管理,bug跟踪管理工具等个性化需求.
帮忙看看吧,谢谢了
登录百度帐号推荐应用2009年7月 总版技术专家分月排行榜第二2009年3月 总版技术专家分月排行榜第二2009年1月 总版技术专家分月排行榜第二2005年7月 总版技术专家分月排行榜第二2005年5月 总版技术专家分月排行榜第二2005年3月 总版技术专家分月排行榜第二
优秀小版主2015年8月优秀小版主2015年9月优秀小版主2015年5月优秀小版主2015年2月论坛优秀版主
2009年7月 VC/MFC大版内专家分月排行榜第三
2009年5月 VC/MFC大版内专家分月排行榜第一
2009年7月 VC/MFC大版内专家分月排行榜第三
2008年1月 总版技术专家分月排行榜第三
2008年1月 VC/MFC大版内专家分月排行榜第一2007年12月 VC/MFC大版内专家分月排行榜第一
本帖子已过去太久远了,不再提供回复功能。后使用快捷导航没有帐号?
查看: 2600|回复: 12
请教关于SHELL脚本中涉及的V$数据字典问题,如何解决?
想请教大家一个问题,我在SHELL里写脚本,涉及到登陆数据库后访问V$数据字典的时候,由于SHELL会把$当成变量,导致我SHELL写不下去,执行根本就报做,我该怎么做呢?谢谢!
Techweb技术网友&
Techweb技术网友&
比如v$sqltext,中间加转义符\,变成v\$sqltext
Techweb技术网友&
把语句写在一个sql脚本中,然后在shell文件里用start ****.sql调用即可
Techweb技术网友&
谢谢大家,用*.sql然后在ORCLE中执行当然,可以,我是想实验一下用SHELL
转义后还有一点问题,大家帮我看看,谢谢!
看我执行,还有错
-bash-3.00$ ls
spid.sh spid.sql
-bash-3.00$ sh spid.sh
SQL*Plus: Release 9.2.0.7.0 - Production on Mon Nov 5 06:54:55 2007
Copyright (c) , Oracle Corporation. All rights reserved.
SQL& Connected.
SQL& SQL& SQL& SQL& SQL& 2 3 4 ( select addr from v$process where spid in())
ERROR at line 4:
ORA-00936: missing expression
SQL& SQL& 2 3 4 5 6 paddr in (select addr from v$process where spid=
ERROR at line 4:
ORA-00936: missing expression
SQL& Disconnected from Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options
JServer Release 9.2.0.7.0 - Production
-bash-3.00$
-bash-3.00$ ls
spid.sh spid.sql
脚本代码如下
-bash-3.00$ cat spid.sh
sqlplus /nolog & connect / as sysdba
col machine format a30
col program format a40
set lines 200
set pages 1000
select sid,serial# ,username,osuser,machine,program,process,to_char(logon_time,
'yyyy/mm/dd hh24:mi:ss')
from v$session where paddr in
( select addr from v\$process where spid in($1));
select sql_text from v\$sqltext_with_newlines
where hash_value in
(select SQL_HASH_VALUE from v\$session where
paddr in (select addr from v\$process where spid=$1)
-bash-3.00$
Techweb技术网友&
好像v$session没有转义啊,再试试
另外如果你打算放在crontab里面要注意环境变量问题
Techweb技术网友&
sqlplus /nolog && EOF
connect / as sysdba
col machine format a30
col program format a40
set lines 200
set pages 1000
select sid,serial# ,username,osuser,machine,program,process,to_char(logon_time,
'yyyy/mm/dd hh24:mi:ss')
from v\$session where paddr in
( select addr from v\$process where spid in($1));
select sql_text from v\$sqltext_with_newlines
where hash_value in
(select SQL_HASH_VALUE from v\$session where
paddr in (select addr from v\$process where spid=$1)
改成这样好看点
Techweb技术网友&
sqlplus /nolog && EOF
connect / as sysdba
col machine format a30
col program format a40
set lines 200
set pages 1000
select sid,serial# ,username,osuser,machine,program,process,to_char(logon_time,
'yyyy/mm/dd hh24:mi:ss')
from v\$session where paddr in
( select addr from v\$process where spid in($1));
select sql_text from v\$sqltext_with_newlines
where hash_value in
(select SQL_HASH_VALUE from v\$session where
paddr in (select addr from v\$process where spid=$1)
&spid.sh& 21 lines, 507 characters
bill_test2$ls
spid.sh spid.sql
bill_test2$ls -lrt
-rwxrwxrwx 1 oracle dba 485 Nov 05 08:50 spid.sql
-rwxrwxrwx 1 oracle dba 507 Nov 05 09:34 spid.sh
bill_test2$sh spid.sh
SQL*Plus: Release 9.2.0.7.0 - Production on Mon Nov 5 09:34:24 2007
Copyright (c) , Oracle Corporation. All rights reserved.
SQL& Connected.
SQL& SQL& SQL& SQL& SQL& 2 3 4 ( select addr from v$process where spid in())
ERROR at line 4:
ORA-00936: missing expression
SQL& SQL& 2 3 4 5 6 paddr in (select addr from v$process where spid=)
ERROR at line 4:
ORA-00936: missing expression
SQL& Disconnected from Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
With the Partitioning option
JServer Release 9.2.0.7.0 - Production
bill_test2$
Techweb技术网友&
不行就用双引号引起来,
这样:&V\$SESSION&
Techweb技术网友&
晕了,你用到了$1,但是你执行的时候没有带入参数啊
比如你想查看进程号是1234的
sh spid.sh 1234

我要回帖

更多关于 产品执行标准编写 的文章

 

随机推荐