Postgresql
PL/pgSQL 函式中何時需要 SELECT?
在 PL/pgSQL 中將函式或表達式的結果分配給變數時,什麼時候需要使用
SELECT
語句(子查詢)?這可能只是我對 SQL 的誤解。我認為一切都應該包含在一個
(SELECT ...)
(即使它只是涉及計算一個數字),例如$$ DECLARE parts text[]; BEGIN parts := (SELECT string_to_array(my_str,'_') ); ... $$
但我只是發現它沒有
SELECT
:parts := string_to_array(my_str,'_');
(就好像我可以像使用 Pascal 一樣使用 PL/pgSQL。)
一般來說,什麼樣的表達式可以直接使用而不
SELECT
計算值?
這只是一個有根據的猜測。
似乎
SELECT
是不必要的,因為它已經存在,例如在隱含SELECT ... INTO
的賦值:=
等價於。從文件中:一個 PL/pgSQL 變數的賦值寫成:
變數 { := | = } 表達式;
如前所述,此類語句中的表達式是通過發送到主數據庫引擎的 SQL SELECT 命令來評估的。
此處可能會顯示一個範例,其中:
name := (SELECT t.name from test_table t where t.id = x);
也可以寫成
name := t.name from test_table t where t.id = x;
這似乎是可能的,因為第二種簡化形式等同
SELECT INTO
於 PL/pgSQL 中的 a:SELECT test_table.name INTO name FROM test_table WHERE id = x;
第一種形式相當於:
SELECT (SELECT t.name from test_table t where t.id = x) INTO name;
,其中有一個
SELECT
可以刪除的冗餘層。另一方面,當隱式
SELECT
不存在時,顯式SELECT
似乎是必要的。例如,不能直接使用相同的功能(即沒有SELECT
)string_to_array(my_str,'_');
如果它不在對變數的賦值中。