Sql 如何在Netezza上的存储过程中使用用例syntac
我只是netezza(运行版本netezza 7.1.0.1-P1[Build 37788])的新手,我创建了一个从另一个数据库加载数据的查询,这是我的查询:Sql 如何在Netezza上的存储过程中使用用例syntac,sql,postgresql,stored-procedures,netezza,Sql,Postgresql,Stored Procedures,Netezza,我只是netezza(运行版本netezza 7.1.0.1-P1[Build 37788])的新手,我创建了一个从另一个数据库加载数据的查询,这是我的查询: CASE INSTR(B.WIFI.WIFI_DETAIL.LOCATION, ';') WHEN 0 THEN B.WIFI.WIFI_DETAIL.LOCATION ELSE BTRIM(SUBSTR(B.WIFI.WIFI_DETAIL.LOCATION, 1, INSTR(B.WIFI.WIFI_DETAIL.LOCATION,
CASE INSTR(B.WIFI.WIFI_DETAIL.LOCATION, ';') WHEN 0 THEN B.WIFI.WIFI_DETAIL.LOCATION ELSE BTRIM(SUBSTR(B.WIFI.WIFI_DETAIL.LOCATION, 1, INSTR(B.WIFI.WIFI_DETAIL.LOCATION, ';')-1)) END AS POI_NAME
它运行得很完美,但当我放入存储过程时,它已经使用@ScottMcG的解决方案进行了修改:
create or replace procedure SP_CREATE_TMP_F_WIFIID_AP_UTILISASI()
LANGUAGE NZPLSQL RETURNS INT4 AS
BEGIN_PROC
DECLARE
BEGIN
/* CREATE TABLE TMP AP UTILISASI WITHOUT CLIENT */
EXECUTE IMMEDIATE '
create TABLE TMP_F_AP_UTILISASI as select AVG(ANN.THROUGPUT_V) as AVG_THROUGHPUT
, SUM(ANN.BYTES_SENT) AS SUM_SENT
, SUM(ANN.BYTES_RECIEVE) AS SUM_RECIEVE
, (SUM(ANN.BYTES_RECIEVE)+SUM(ANN.BYTES_SENT)) AS TOTAL_AMOUNT
, COUNT(ANN.C_MAC_ADDRESS) AS ASSOCIATED_CLIENT_COUNT
, COUNT(ANN.USER_NAME) AS AUTHENTICATED_CLIENT_COUNT
, MAX(ANN.TOTAL_WAKTU) AS MAX_SESSION_DURATION
, ANN.AP_NAME
, ANN.ASSO_TIME_V
, ANN.PAKET_NAME
, ANN.SSID
, CASE INSTR(AD.LOCATION, ' || quote_literal (';') || ') WHEN 0 THEN AD.LOCATION ELSE BTRIM(SUBSTR(AD.LOCATION, 1, INSTR(AD.LOCATION, ' || quote_literal (';') || ')-1)) END AS POI_NAME
FROM
A.USR3.V_ALL_NMS_DETAIL AS ANN
JOIN A.USR3.V_NMS_AP_DETAIL AS AD
ON ANN.AP_NAME = AD.AP_NAME
GROUP BY ANN.AP_NAME
, ANN.ASSO_TIME_V
, ANN.PAKET_NAME
, ANN.SSID
, AD.LOCATION
';
END;
END_PROC;
当我调用程序时,它仍然不起作用:
ERROR: Cross Database Access not supported for this type of command
我从数据库A调用,并在
也许你有办法解决我的问题
或者,对于此查询,任何一个查询都可能具有另一个要相等的查询:
CASE INSTR(AD.LOCATION, ' || quote_literal (';') || ') WHEN 0 THEN AD.LOCATION ELSE BTRIM(SUBSTR(AD.LOCATION, 1, INSTR(AD.LOCATION, ' || quote_literal (';') || ')-1)) END AS POI_NAME
Thx试试这个:
create or replace procedure SP_CREATE_TMP_F_WIFIID_AP_UTILISASI()
LANGUAGE NZPLSQL RETURNS INT4 AS
BEGIN_PROC
DECLARE
BEGIN
/* CREATE TABLE TMP AP UTILISASI WITHOUT CLIENT */
EXECUTE IMMEDIATE '
create TABLE TMP_F_AP_UTILISASI as select AVG(ANN.THROUGPUT_V) as AVG_THROUGHPUT
, SUM(ANN.BYTES_SENT) AS SUM_SENT
, SUM(ANN.BYTES_RECIEVE) AS SUM_RECIEVE
, (SUM(ANN.BYTES_RECIEVE)+SUM(ANN.BYTES_SENT)) AS TOTAL_AMOUNT
, COUNT(ANN.C_MAC_ADDRESS) AS ASSOCIATED_CLIENT_COUNT
, COUNT(ANN.USER_NAME) AS AUTHENTICATED_CLIENT_COUNT
, MAX(ANN.TOTAL_WAKTU) AS MAX_SESSION_DURATION
, ANN.AP_NAME
, ANN.ASSO_TIME_V
, ANN.PAKET_NAME
, ANN.SSID
, CASE INSTR(AD.LOCATION, ";") WHEN 0 THEN AD.LOCATION ELSE BTRIM(SUBSTR(AD.LOCATION, 1, INSTR(AD.LOCATION, ";")-1)) END AS POI_NAME
FROM
A.USR3.V_ALL_NMS_DETAIL AS ANN
JOIN A.USR3.V_NMS_AP_DETAIL AS AD
ON ANN.AP_NAME = AD.AP_NAME
GROUP BY ANN.AP_NAME
, ANN.ASSO_TIME_V
, ANN.PAKET_NAME
, ANN.SSID
, AD.LOCATION
';
END;
END_PROC;
在你的情况下,问题不在于案件本身。在存储过程中使用动态SQL时(例如,EXECUTE IMMEDIATE),需要转义文本中嵌入的引号。你可以用两种(至少)方法来做这件事 下面是两个使用带有字符串文本的CASE语句的存储过程示例。第一个使用两个单引号“”表示转义单引号。第二个使用quote_literal函数 转义引号版本
CREATE OR REPLACE PROCEDURE SP_SAMPLE()
RETURNS INTEGER
EXECUTE AS CALLER
LANGUAGE NZPLSQL AS
BEGIN_PROC
BEGIN
EXECUTE IMMEDIATE 'UPDATE TESTING_TABLE SET COL1 = CASE INSTR(COL2,'';'') WHEN 0 THEN ''NOT SEMICOLON'' ELSE ''SEMICOLON'' END';
END;
END_PROC;
QUOTE_文字函数版本
CREATE OR REPLACE PROCEDURE SP_SAMPLE()
RETURNS INTEGER
EXECUTE AS CALLER
LANGUAGE NZPLSQL AS
BEGIN_PROC
BEGIN
EXECUTE IMMEDIATE 'UPDATE TESTING_TABLE SET COL1 = CASE INSTR(COL2,' || quote_literal (';') ||
') WHEN 0 THEN ' || quote_literal('NOT SEMICOLON') || ' ELSE ' || quote_literal('SEMICOLON') || ' END';
END;
END_PROC;
您可以参考文档和示例您必须在SQL字符串中转义引号。“;”)应成为“”;“”)你好@FrankHeikens,还是错误…错误:属性“;”不需要foundthx的帮助,但仍然存在错误:(.error:error:Attribute“;”not foundhi@ScottMcG,我已经尝试了您建议的解决方案,但是error:error:Cross-Database Access不支持这种类型的命令它不能跨数据库?当我将表放在一个数据库中时,仍然会出现错误:error:Cross-Database Access不支持这种类型的命令可能您已经解决此问题的另一个解决方案THX您正在运行哪个版本的Netezza?能否使用quote_文字将您的问题文本更新为全新版本?存储过程是在哪个数据库中创建的,您从哪个数据库调用它?向我们展示创建SP和执行SP的完整上下文t跨数据库访问错误。