1. 程式人生 > 實用技巧 >pgsql 記錄型別

pgsql 記錄型別

記錄型別:
見如下形式的變數宣告:
nameRECORD;
記錄變數類似於行型別變數,但是它們沒有預定義的結構,只能通過SELECT或FOR命令來獲取實際的行結構,因此記錄變數在被初始化之前無法訪問,否則將引發執行時錯誤。
注:RECORD不是真正的資料型別,只是一個佔位符。

基本語句:

1. 賦值:
PL/pgSQL中賦值語句的形式為:identIFier := expression,等號兩端的變數和表示式的型別或者一致,或者可以通過PostgreSQL的轉換規則進行轉換,否則將會導致執行時錯誤,見如下示例:
user_id := 20;
tax := subtotal * 0.06;

2. SELECT INTO:

通過該語句可以為記錄變數或行型別變數進行賦值,其表現形式為:SELECT INTO target select_expressions FROM ...,該賦值方式一次只能賦值一個變數。表示式中的target可以表示為是一個記錄變數、行變數,或者是一組用逗號分隔的簡單變數和記錄/行欄位的列表。select_expressions以及剩餘部分和普通SQL一樣。
如果將一行或者一個變數列表用做目標,那麼選出的數值必需精確匹配目標的結構,否則就會產生執行時錯誤。如果目標是一個記錄變數,那麼它自動將自己構造成命令結果列的行型別。如果命令返回零行,目標被賦予空值。如果命令返回多行,那麼將只有第一行被賦予目標,其它行將被忽略。在執行SELECT INTO語句之後,可以通過檢查內建變數FOUND來判斷本次賦值是否成功,如:

    SELECT INTO myrec * FROM emp WHERE empname = myname;
    IF NOT FOUND THEN
        RAISE EXCEPTION 'employee % not found', myname;
    END IF;

要測試一個記錄/行結果是否為空,可以使用IS NULL條件進行判斷,但是對於返回多條記錄的情況則無法判斷,如:

    DECLARE
        users_rec RECORD;
    BEGIN
        SELECT INTO users_rec * FROM users WHERE user_id = 3
; IF users_rec.homepage IS NULL THEN RETURN 'http://'; END IF; END;