91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ORACLE存儲過程in關鍵字使用

發布時間:2020-10-11 01:03:48 來源:網絡 閱讀:9328 作者:fcl961561322 欄目:關系型數據庫

一、問題描述:

寫了一個存儲過程(只取了半截,能說明命題即可)

ORACLE存儲過程in關鍵字使用

CREATE OR REPLACE 
PROCEDURE "MONTH_RPT_CENTER_STU_DATA_PROC" (centerIds in VARCHAR2)
AS mlockdate date;
BEGIN
/*
	創建人:fengcl
	創建時間:2018.1.23
	更新人:
	更新時間:
	參數:中心編號(字符串類型)
	功能:調用時,先從中間表刪除指定中心的數據,再重新查詢插入指定中心的數據到中間表
*/
--獲取月報鎖定日期
select trunc(sysdate,'mm')+to_number( name) into mlockdate 
from mdm_dic_option where code='monthReportDate' and dic_code='system_set_001';

if mlockdate<trunc(sysdate)  then 
delete from rpt_month_stu_data 
where RPT_DATE>=add_months(trunc(sysdate,'mm'),-1) 
	    and RPT_DATE<trunc(sysdate,'mm') and CENTER_ID in (centerIds);
commit;

在調用這個存儲過程的時候,如果參數centerIds只有一個數字,例如:1 可以正常執行,但是如果有多個數字的話,例如:1,2,3,4,5 就回報如下錯誤,

Procedure execution failed

ORA-01722: 無效數字

ORA-06512: 在 "CRM3TEST.MONTH_RPT_CENTER_STU_DATA_PROC", line 17

ORA-06512: 在 line 1


查詢時間: 0.029s


二、解決過程

通過百度發現,存儲過程把這個參數作為了一個整體來處理了,并不象普通的sql一樣,把他作為一個數組來對待


三、解決方案

百度了一下,發現網上方案挺多,但是我選擇了以下的方案,就是自定義一個函數,對這個參數進行處理。

步驟一、新建一個oracle變量:(普通的sql查詢窗口既可以創建)

CREATE OR REPLACE TYPE strsplit_type IS TABLE OF VARCHAR2 (4000)

步驟二、新建一個函數(這個函數是網上現成的,親測可用)

CREATE OR REPLACE 
function strsplit(p_value varchar2,
                                    p_split varchar2 := ',')
return strsplit_type
pipelined is
  v_idx       integer;
  v_str       varchar2(500);
  v_strs_last varchar2(4000) := p_value;
begin
  loop
    v_idx := instr(v_strs_last, p_split);
    exit when v_idx = 0;
    v_str       := substr(v_strs_last, 1, v_idx - 1);
    v_strs_last := substr(v_strs_last, v_idx + 1);
    pipe row(v_str);
  end loop;
  pipe row(v_strs_last);
  return;
end strsplit;

步驟三、改造存儲過程(將原先的 in (centerIds) 更改為: in (select * from table (strsplit(centerIds))) )

CREATE OR REPLACE 
PROCEDURE "MONTH_RPT_CENTER_STU_DATA_PROC" (centerIds in VARCHAR2)
AS mlockdate date;
BEGIN
/*
	創建人:fengcl
	創建時間:2018.1.23
	更新人:
	更新時間:
	參數:中心編號(字符串類型)
	功能:調用時,先從中間表刪除指定中心的數據,再重新查詢插入指定中心的數據到中間表
*/
--獲取月報鎖定日期
select trunc(sysdate,'mm')+to_number( name) into mlockdate 
from mdm_dic_option where code='monthReportDate' and dic_code='system_set_001';

if mlockdate<trunc(sysdate)  then 
delete from rpt_month_stu_data 
where RPT_DATE>=add_months(trunc(sysdate,'mm'),-1) 
	    and RPT_DATE<trunc(sysdate,'mm') and CENTER_ID in (select * from table(strsplit(centerIds)));
commit;

到此,問題解決。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌恰县| 永春县| 双柏县| 庄浪县| 宁夏| 塔城市| 屯昌县| 满城县| 东光县| 朝阳区| 会理县| 河东区| 茌平县| 云龙县| 读书| 威海市| 泸水县| 时尚| 郎溪县| 邵东县| 咸阳市| 元氏县| 四子王旗| 德兴市| 蕉岭县| 三原县| 丰原市| 科技| 甘谷县| 永善县| 栾城县| 崇州市| 南康市| 秦皇岛市| 苗栗市| 洛宁县| 双辽市| 吴旗县| 慈溪市| 定西市| 抚顺市|