博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle_merge into 中 using 后的查询表如果有参数的情况
阅读量:4958 次
发布时间:2019-06-12

本文共 2654 字,大约阅读时间需要 8 分钟。

Oracle_merge into 中 using 后的查询表如果有参数的情况。

先说一下merge into 的基本语法

/*语法:

MERGE [INTO [schema .] table [t_alias]
USING [schema .] { table | view | subquery } [t_alias]
ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
*/

一般的 using 后是跟着一个具体的表名,但实际的开发中有时是带参数的情况,

以上的语法就不适合了,个人认为用动态的拼接字符串的方法,来解决问题。

 我们来举例解释:

假设我们要 把店铺操作界面上选择的店铺插入到线上订单数据库的店铺表里,

从界面上的操作返回的是"店铺ID1,店铺ID2,店铺ID3......"的形式。

代码如下:

View Code
1     --说明:把店铺操作界面上选择的店铺插入到线上订单数据库的店铺表里 2     --作者:杨斌 3     --日期:2012-08-09 4     procedure insertSelectedShops( 5              strSelectedShopID in varchar2,      --店铺操作界面上选择的店铺ID,是"店铺ID1,店铺ID2,店铺ID3......"的形式。 6              out_error_row out number,           --错误行 7              out_error_msg out varchar2          --错误信息 8              )            9     is 10     11       str_sql varchar2(4000);--定义查询SQL语句变量      12     begin13     14       out_error_row :=1;--错误行15       16       str_sql := ' merge into T_XS_SHOP t1 ' ||17       ' using (select shop_id,SHOP_TYPE_ID,TITLE,APPKEY,APPSECRET,SESSIONKEY from t_base_shopup@yb where shop_id in ('||strSelectedShopID||')) t2 ' ||18       ' on (t1.shop_id = t2.shop_id) ' ||19       ' when matched then ' ||20       '   update set t1.title =  t2.TITLE, ' ||21       '             t1.pt_id = t2.SHOP_TYPE_ID, ' ||22       '             t1.app_key = t2.APPKEY, ' ||23       '             t1.appsecret = t2.APPSECRET, ' ||24       '             t1.sessionkey = t2.SESSIONKEY, ' ||25       '             t1.createtime =  '''|| to_char(sysdate,'YYYY/MM/DD/hh24:mm:ss') ||26       ''' when not matched then ' ||27       '   insert (           ' ||28       '           SHOP_ID,   ' ||29       '           PT_ID,     ' ||30       '           TITLE,     ' ||31       '           APP_KEY,   ' ||32       '           AppSecret, ' ||33       '           SessionKey, ' ||  34       '           CREATETIME ' ||35       '           )          ' ||36       '           values     ' ||37       '           (          ' ||38       '           t2.shop_id,t2.SHOP_TYPE_ID,t2.TITLE,t2.APPKEY,t2.APPSECRET,t2.SESSIONKEY, ''' ||to_char(sysdate,'YYYY/MM/DD/hh24:mm:ss') ||39       '''           )  ';40                    41       out_error_row := 2;--错误行 42       43       execute immediate str_sql; 44       45       out_error_row := 3;--错误行 46       47     exception48       when others then 49         out_error_msg := '数据库错误:' || sqlerrm; 50       51     end insertSelectedShops;

 

 

 

 代码解释:上面的代码using 中有一个参数strSelectedShopID,

最后用execute immediate执行以下。

一定要注意最后拼接的部分,如果是   '           );  ';   这样,就会报“数据库错误:ORA-00911: 无效字符”的错误。

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/YangBinChina/archive/2012/08/11/2633724.html

你可能感兴趣的文章
前端知识
查看>>
yii登录
查看>>
(四)hadoop系列之__hadoop搭建(单机配置)
查看>>
nodejs爬虫数据存入mysql
查看>>
sphinx2.8.8的配置文件
查看>>
Visual Studio 2019 正式版 更新内容
查看>>
Oracle 如何查看当前的实例及切换实例
查看>>
原创:路由配置实践 两个局域网主机的互连 VM linux
查看>>
奇怪吸引子---FourWing
查看>>
4、下行短信发送WebService、下行短信发送服务 -功能详细设计 --短信平台
查看>>
c++中虚函数与纯虚函数的区别(转)
查看>>
CUDA 矩阵相乘完整代码
查看>>
未来在哪
查看>>
unity LitJson 用法
查看>>
3-08函数-局部变量
查看>>
软件工程学科的诞生
查看>>
nginx防止恶意域名解析
查看>>
SharePoint 2007 安装攻略
查看>>
qiangchezu car contact qq 30288891@qq.com
查看>>
javascript基础知识(9) Map和Set
查看>>