create  or  replace  function f_op (p_n1  number , p_op  varchar2 , p_n2  number )  return  number

as

begin

return  case  when p_op =  '+'  then p_n1 + p_n2

when p_op =  '-'  then p_n1 - p_n2

when p_op =  '*'  then p_n1 * p_n2

when p_op =  '/'  and p_n2<> 0  then p_n1 / p_n2

else  null

end ;

end f_op;

/

create  or  replace  procedure pro_241(p1  number , p2  number , p3  number , p4  number )  as

r_result  number  default  0 ;

begin

for r  in (

with t_num  as

( select  1  id ,p1  as n  from dual

union

select  2  id ,p2  as n  from dual

union

select  3  id ,p3  as n  from dual

union

select  4  id ,p4  as n  from dual),

t_op  as

( select  '+'  as o  from dual

union

select  '-'  as o  from dual

union

select  '*'  as o  from dual

union

select  '/'  as o  from dual)

select  distinct

a.n   as a,

o1.o  as o1,

b.n   as b,

o2.o  as o2,

c.n   as c,

o3.o  as o3,

d.n   as d

from t_num a, t_num b, t_num c, t_num d,

t_op  o1, t_op  o2, t_op  o3

where a.id  not  in (b.id, c.id, d.id)

and b.id  not  in (c.id, d.id)

and c.id <> d.id)  loop

r_result := f_op(f_op(f_op(r.a,r.o1,r.b),r.o2,r.c),r.o3,r.d);

if r_result=12  then

dbms_output.put_line( '((' ||r.a||r.o1||r.b|| ')' ||r.o2||r.c|| ')' ||r.o3||r.d);

end  if ;  --((a b) c) d

r_result := f_op(f_op(r.a,r.o1,r.b),r.o2,f_op(r.c,r.o3,r.d));

if r_result=12  then

dbms_output.put_line( '(' ||r.a||r.o1||r.b|| ')' ||r.o2|| '(' ||r.c||r.o3||r.d|| ')' );

end  if ;  --(a b) (c d)

end  loop ;

end ;

/

set serveroutput on;

exec pro_241( 32 , 13 , 3 , 17 );

24SQL的更多相关文章

  1. 30种oracle常见的等待事件说明

    1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: 当一个会话视图修改一个数据块,但这 ...

  2. Oracle常见等待事件

    1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: ·         当一个会话视图 ...

随机推荐

  1. 对Live Writer支持的继续改进:设置随笔地址别名(EntryName)

    在我们发布[功能改进]Live Writer发博支持"建分类.加标签.写摘要"之后,Artech提了一个很好的建议:希望在Live Writer发布随笔时可以设置EntryName ...

  2. 如何使用Profiler跟踪阻塞信息

    Blocked Process ReportProfiler提供一个被阻塞进程报告的事件Errors and Warnings->Blocked Process Report 指示某个任务已被阻 ...

  3. TP框架常用(一)

    25.显示最后一条查询的sql语句:主要用于在连贯操作时,检测拼接的sql语句是否正确 echo $this->db->last_query();//如:select * from pt_ ...

  4. iOS 如何在Label中显示html的文本

    if (self.messageModel) { NSString * htmlString = self.messageModel.contentText; NSAttributedString * ...

  5. 【原创】linux 批量清空文本内容

    清空所有PHP文件 find . -name '*.php'|xargs sed -i '1,$d' 清空所有文件 find . -type f|xargs sed -i '1,$d'

  6. win7 64位 asp+access 数据库连接出错[代码:02],请检查数据库链接文件中的连接字串

    解决办法,启用32位应用程序改为true 打开“Internet 信息服务(IIS)管理器”,在最右边的窗口中点击“应用程序池”,在用到的应用程序池上点击右键,选择“高级设置”

  7. jmeter安装配置教程

    1.下载Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 目前最新版为3.1,其余文件如源代码等也可从如下官网下载: http://jm ...

  8. paper 116:自然图像抠图/视频抠像技术梳理(image matting, video matting)

    1. Bayesian Matting, Chuang, CVPR 2001.http://grail.cs.washington.edu/projects/digital-matting/paper ...

  9. Javascript 中判断对象为空

    发现了一个巧妙的实现: 需要检查一个对象(Object)是否为空,即不包含任何元素.Javascript 中的对象就是一个字典,其中包含了一系列的键值对(Key Value Pair).检查一个对象是 ...

  10. C++之动态数组

    C99支持一种名为变长数组的结构来方便程序员.C++也提供了一种长度可在程序运行时确定的数组类型:动态数组.声明格式为:(声明 int 类型的数组) ; //此处可修改 ArraySize 的值 in ...