create or replace procedure peis_sign(TASKID_IN in Varchar2) as
n_登記ID Number(18);
n_人員ID Number(18);
v_操作員姓名 varchar2(20);
v_簽到批次 Varchar2(10);
v_計費批次 Varchar2(10);
V_發送批次 Varchar2(10);
n_任務id Number(18);
n_發送號 Number(18);
v_姓名 Varchar2(100);
v_性別 Varchar2(10);
v_年齡 Varchar2(10);
v_年齡數字 Varchar2(10);
v_組合id Varchar2(10);
v_申請人 Varchar2(100);
d_申請時間 date;
v_申請科室 Varchar2(50);
v_健康號 VARCHAR2(50);
v_病人科室 VARCHAR2(50);
v_掛號單 VARCHAR2(8);
n_門診號 NUMBER(18);
d_出生日期 date;
V_病區 VARCHAR2(100);
V_病區編碼 VARCHAR2(10);
v_樣本條碼 VARCHAR2(18);
n_計費狀態 NUMBER(3);
begin
select 姓名 into v_操作員姓名 from 上機人員表 s, 人員表 r where s.人員id=r.id and s.用戶名=user;
select nextno(160) into v_簽到批次 from dual;
select 任務登記id,登記記錄ID, 體檢人員ID into n_任務id,n_登記ID,n_人員ID from 體檢分組人員 r where r.體檢編號=TASKID_IN;
zl_體檢分組人員_sign(n_登記ID, n_人員ID, v_操作員姓名, sysdate, v_簽到批次);
Select NextNO('153','0','','1') into v_計費批次 From Dual;
zl_體檢人員專案_Billing(n_任務id||','||n_人員ID,v_計費批次,'1');
zl_體檢人員費用_Insert(v_計費批次,'0');
for c in (Select a.任務登記id,a.體檢人員id,a.體檢人員id As 病人id,a.登記專案id, a.體檢專案id,a.計價方式, 序號, a.從屬父號,a.價格父號,a.加班標志,a.附加標志,a.付數,a.操作員姓名, a.操作員編號,
a.收費類別, a.計算單位, a.收費細目id, a.收費專案id, a.收入專案id,a.收據費目, a.收費專案, a.時價, a.分批, a.可否分零, a.劑量系數,
a.應收金額, a.實收金額, a.標準金額, a.體檢金額, a.數次, a.醫囑id,a.門診號, a.姓名, a.性別, a.年齡, a.費別, a.費用單據, a.費用物件, a.費用性質, a.記錄性質,
a.體檢部門id, a.開單部門id, a.開單人, a.執行科室, a.執行科室id,a.執行科室id As 執行部門id, round(nvl(a.標準單價,0), 2 ) as 單價, a.登記時間, a.病人科室id, 發生時間,'' As 劃價人
From (
Select RowNum As 序號, Null As 從屬父號,Null As 價格父號,0 As 加班標志,0 as 附加標志,1 as 付數, A.發送人員 as 操作員姓名,'zlhis' as 操作員編號,A.任務登記id, A.登記專案id, A.體檢專案id, A.收費類別, A.計算單位,
A.收費專案id as 收費細目ID,A.收費專案id,A.收入專案id ,a.收據費目,A.收費專案, A.時價, A.分批, A.可否分零,
A.劑量系數, A.執行科室id, 0 As 應收金額, 0 As 實收金額, A.標準金額, A.體檢金額, A.數次, A.醫囑id, A.體檢人員id, A.姓名, A.性別, a.門診號,
A.年齡, A.費別, A.費用單據, A.費用物件, A.費用性質, A.記錄性質, A.體檢部門id, A.開單科室id as 開單部門id, A.開單醫生 as 開單人,
B.名稱 As 執行科室,A.標準單價,A.登記時間,A.體檢部門id As 病人科室id,Sysdate As 發生時間,A.計價方式
From (Select C.任務登記id, C.體檢人員id, E.登記專案ID, C.體檢專案id, K.計價方式,D.類別 As 收費類別, D.計算單位, A.收費專案id, D.名稱 As 收費專案,
Nvl(D.是否變價, 0) As 時價, Nvl(Decode(D.類別, '4', I.在用分批, H.藥房分批), 0) As 分批, H.門診可否分零 as 可否分零,
H.劑量系數, Decode(A.執行科室id, B.執行科室id, C.執行科室id, A.執行科室id) As 執行科室id,
A.體檢金額,
Nvl(A.收費數次, 1) As 數次,
Decode(D.是否變價, 1, A.體檢金額, Z.現價) as 標準單價, Z.現價*Nvl(A.收費數次, 1) As 標準金額,
Decode(E.費用物件, 1, C.醫囑記錄id, C.采集醫囑id) As 醫囑id, F.姓名,
f.門診號,F.性別, F.年齡, F.費別, E.費用單據, E.費用物件, E.費用性質, E.記錄性質, G.體檢部門id, B.開單科室id, B.開單醫生, Sysdate As 登記時間,Z.收入專案ID,Q.收據費目,C.發送人員
From 體檢分組計價 A,
體檢分組專案 B,
體檢人員專案 C,
收費專案目錄 D,
病人資訊 F,
( Select Distinct x.費用單據, x.費用物件, x.費用性質, x.記錄性質, y.Id As 人員專案id,y.登記專案ID, x.專案物件
From 體檢人員專案 Y, 體檢人員費用 X
Where y.計費批次 =v_計費批次 And x.人員專案id = y.Id and X.專案物件=1
Union
Select Distinct x.費用單據, x.費用物件, x.費用性質, x.記錄性質, y.Id As 人員專案id,Z.ID as 登記專案ID, x.專案物件
From 體檢人員專案 Y, 體檢人員費用 X,體檢分組專案 Z
Where y.計費批次 =v_計費批次 And x.人員專案id = y.Id and (Y.登記專案id=Z.相關id Or Y.登記專案id=Z.id) and Y.體檢人員id=Z.體檢人員id And Z.是否職業=1 and X.專案物件=2
) E,
體檢任務登記 G,體檢分組記錄 K,
藥品規格 H,
材料特性 I,
收費價目 Z,
收入專案 Q Where C.計費批次 =v_計費批次 AND Z.收入專案id = Q.ID AND (Q.撤檔時間 is Null Or Q.撤檔時間 > Sysdate)
And A.登記專案id = B.Id
And B.Id=E.登記專案ID
And C.Id = E.人員專案id
And D.ID =A.收費專案id
And D.ID =Z.收費細目ID
And z.執行日期 <= Sysdate And (Z.終止日期 Is Null Or Z.終止日期 > Sysdate)
And G.ID = B.任務登記id
And C.體檢人員id = F.病人id
And H.藥品id(+) = D.ID
And I.材料id(+) = D.ID
And K.ID=B.登記記錄id
And A.收費物件 = E.費用物件 And Z.價格等級 is Null Order By C.任務登記id,C.體檢人員id,C.登記專案id,A.檢查部位,A.收費專案id, Nvl(Z.序號,0)
) A,
部門表 B
Where A.執行科室id = B.ID(+)
/* and (a.費用單據,a.記錄性質) not in (Select b.費用單據, b.記錄性質
From 體檢人員專案 A, 體檢人員費用 B, 門診費用記錄 C
Where a.計費批次 =v_計費批次 And a.Id = b.人員專案id And b.費用單據 = c.No And b.記錄性質 = c.記錄性質) */
) A Order by a.任務登記id,a.體檢人員id,a.登記專案id,a.記錄性質,a.費用單據,a.收費專案id ) loop
Zl_門診記帳記錄_Insert(c.費用單據,c.序號,c.病人id,c.門診號,c.姓名,c.性別,c.年齡,c.費別,'','',c.病人科室id,c.開單部門id,c.開單人,'',c.收費專案,c.收費類別,
c.計算單位,c.付數,c.數次,c.附加標志,c.執行科室id,c.價格父號,c.收入專案id,c.收據費目,c.單價,c.應收金額,c.實收金額,c.發生時間,c.登記時間,'','0',c.操作員編號,c.操作員姓名,
'','','','','','','4');
Select max(m.發送批次),max(n.發送號) into V_發送批次,n_發送號 From 體檢人員專案 m,病人醫囑發送 n Where m.醫囑記錄id = n.醫囑id and m.任務登記id=n_任務id And m.體檢人員id=n_人員ID;
zl_體檢人員專案_Send(n_登記ID,n_人員ID,c.登記專案id,c.操作員姓名,sysdate,V_發送批次,n_發送號);
end loop;
for z in ( Select a.醫囑記錄id,a.采集醫囑id,a.檢驗標本,b.編碼 As 執行科室編碼,d.名稱 as 采集方式,e.名稱 as 采集科室,
f.費別,Sum(f.應收金額) As 應收金額,Sum(Decode(f.記錄狀態, 1, f.實收金額, 0)) as 實收金額
From 體檢人員專案 a,部門表 b,病人醫囑記錄 c,診療專案目錄 d,部門表 e,門診費用記錄 f
Where c.id =a.采集醫囑id and c.診療專案id = d.id and c.執行科室id = e.id and a.執行科室id = b.Id and f.醫囑序號 = a.醫囑記錄id and f.執行狀態<>'9'
And a.醫囑記錄id Is Not Null And a.采集醫囑id Is Not Null And a.任務登記id = n_任務id /*And a.發送批次 = V_發送批次*/ and a.體檢人員id=n_人員ID
group by a.醫囑記錄id,a.采集醫囑id,a.檢驗標本,b.編碼,d.名稱,e.名稱,f.費別 ) loop
Select C.姓名 into v_姓名,decode(C.性別,'男','1','女','2','未知','9','0') into v_性別,a.年齡 into v_年齡,substr(a.年齡,1,instr(a.年齡,'歲','1','1')-1) into v_年齡數字,
A.開囑醫生 into v_申請人,A.開囑時間 into d_申請時間, D.名稱 into v_申請科室,
C.健康號 into v_健康號, E.名稱 into v_病人科室, A.掛號單 into v_掛號單, C.門診號 into n_門診號, C.出生日期 into d_出生日期,
b.樣本條碼 into v_樣本條碼,b.計費狀態 into n_計費狀態,g.編碼 into V_病區編碼,g.名稱 into v_病區,m.id into v_組合id
From 病人醫囑記錄 A, 病人醫囑發送 B, 病人資訊 C, 部門表 D, 部門表 E,診療專案目錄 F,部門表 g,病案主頁 s,檢驗組合專案 m
Where A.Id = B.醫囑id And A.病人id = C.病人id And A.開囑科室id = D.Id And A.病人科室id = E.Id and a.診療專案id = f.id and a.病人id= s.病人id(+) and a.主頁id = s.主頁id(+)
and c.當前病區ID = g.id(+) and m.編碼 = f.編碼 and a.id = z.醫囑記錄id;
Zl_檢驗申請單_Insert(z.采集醫囑id,z.醫囑記錄id,'4',n_人員ID,'0',v_姓名,v_性別,v_年齡,v_年齡數字,'歲',v_組合id,z.檢驗標本,v_申請人,d_申請時間,v_申請科室,'',v_健康號,v_病人科室,'0',v_掛號單,n_門診號,'',d_出生日期,'','',Null,'',Null,'',Null,n_計費狀態,'','',v_病區,V_病區編碼,'','',v_樣本條碼,z.采集方式,z.采集科室,z.應收金額,z.實收金額,z.費別,'','','','','','');
end loop;
end;
uj5u.com熱心網友回復:
編譯的時候有沒有什么提示啊uj5u.com熱心網友回復:
我看你這個procedure主體是2個for loop,就是關聯比較多,可以把每個loop里面的sql單獨拿出來執行下。uj5u.com熱心網友回復:
編譯不通過 沒有啥提示么?uj5u.com熱心網友回復:
把報錯提示發出來,報錯后的下滑紅線截圖uj5u.com熱心網友回復:
小小建議:改寫成insert /*+ append */ +表關聯吧;隱式游標,看著就頭大
出錯,還不容易糾正,很麻煩
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/43198.html
標籤:開發
上一篇:oracle 匯出中文亂碼
