溫馨提示×

溫馨提示×

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

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

關于oracle的一點備忘

發(fā)布時間:2020-06-07 01:14:01 來源:網(wǎng)絡 閱讀:320 作者:jackdongting 欄目:關系型數(shù)據(jù)庫

數(shù)據(jù)庫無法回避的就是處理數(shù)據(jù)


情景:發(fā)票信息,很多公司員工在進行交易的時候,填寫的發(fā)票信息都是一樣的,所以公司員工往往想調(diào)用統(tǒng)一的發(fā)票信息,公司會計登錄系統(tǒng)可以填寫通用發(fā)票信息,為了生成訂單簡單,發(fā)票需要和員工號碼綁定,所以發(fā)票的表里想要復制一份員工號為會計的發(fā)票信息,改動其中的員工號,發(fā)票id,創(chuàng)建時間,其余不變



不知道大家弄懂應用情境沒,敘述能力有限。


解決:可以使用select into,但是感覺不方便和靈活。所以考略利用右邊和存儲過程,因為沒有返回值,就不寫函數(shù)了


上代碼:

create or replace procedure myprocd(
    uid in varchar2
)
AS
    receipt_autoid number;
BEGIN
    select SEQ_CHEM_DICT_RECEIPT.NEXTVAL into receipt_autoid from dual;
    for rs in (select * from CHEM_DICT_RECEIPT where user_id='0')
    loop
        rs.user_id:=uid;
        rs.id:=receipt_autoid;
        rs.receipt_id:='RE0215'||receipt_autoid;
        rs.created_time:=sysdate;
        insert into chem_dict_receipt values rs;
    end loop;
END myprocd;
execute myprocd('002');

提醒:我實在是沒搞清楚序列如何在循環(huán)中增加,所以我更改了策略,我讓游標只能讀取一次,也就是不再循環(huán),所以更改如下

CREATE OR REPLACE procedure SIT_HXPGL.myproce(
    uid_re in varchar2,
    type_re in varchar2
)AS
    receipt_autoid number(12);
BEGIN
    select SEQ_CHEM_DICT_RECEIPT.NEXTVAL into receipt_autoid from dual;
    for rs in (select * from CHEM_DICT_RECEIPT where user_id='0' and receipt_type=type_re)
    loop
        rs.user_id:=uid_re;
        rs.id:=receipt_autoid;
        rs.receipt_id:='RE0215'||receipt_autoid;
        rs.created_time:=sysdate;
        insert into CHEM_DICT_RECEIPT values rs;
        
    end loop;
END myproce;
/

無奈代碼里沒有辦法標紅。我新加了一個變量

type_re

這樣我的游標只能每次讀取一組數(shù)據(jù)。

最后加一句,關于執(zhí)行存儲過程,好像是call和execute都可以,推薦使用call


小思路:好像可以吧獲取自增序列放在自定義函數(shù),然后調(diào)用,可能不會有問題

關于函數(shù)和存儲過程或者游標,這里有個鏈接很好,可以參考下

http://wen866595.iteye.com/blog/1733887       程序點滴

其中有個小問題,我實在實踐中發(fā)現(xiàn)的,但是還沒看oracle的官方文檔。

問題:存儲過程的結束END;

解決:END myproc;

解釋:應該是要加上存儲過程的名字

向AI問一下細節(jié)

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

AI