该表org有一列名为npi。为什么query1有效而不query2有效?
查询 1 -
CREATE OR REPLACE FUNCTION check (npi TEXT)
RETURNS BOOLEAN AS $$
DECLARE
pass_npi TEXT;
BEGIN
pass_npi := npi;
SELECT 1
FROM org doc
WHERE doc.npi = pass_npi
;
RETURN 1;
END $$
Run Code Online (Sandbox Code Playgroud)
查询 2 -
CREATE OR REPLACE FUNCTION check (npi TEXT)
RETURNS BOOLEAN AS $$
BEGIN
SELECT 1
FROM org doc
WHERE doc.npi = npi
;
RETURN 1;
END $$
Run Code Online (Sandbox Code Playgroud)
错误 -
Ambigious column name NPI
因为在第二种情况下,不清楚是npi表列(这将是有效的,但无用的语句)还是函数参数。
除了第一个查询中的解决方案之外,还有三种解决方案:
最好的一种:使用名称与表列不同的函数参数。这可以通过使用前缀来完成:
CREATE FUNCTION check (p_npi TEXT) RETURNS boolean AS
...
SELECT ...
WHERE doc.npi = p_npi
Run Code Online (Sandbox Code Playgroud)使用ALIAS命令“重命名”参数:
CREATE FUNCTION check (npi TEXT) RETURNS boolean AS
$$DECLARE
p_npi ALIAS FOR npi;
BEGIN
...
SELECT ...
WHERE doc.npi = p_npi
Run Code Online (Sandbox Code Playgroud)使用函数名称限定参数:
CREATE FUNCTION check (npi TEXT) RETURNS boolean AS
...
SELECT ...
WHERE doc.npi = check.npi
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2829 次 |
| 最近记录: |