用动态写存储过程 SQL
Write stored procedure with dynamic SQL
我想编写一个存储过程,它采用文本参数 (table_name) 并根据该 tablename: select count(*) from 和 that 执行查询将找到的值写入 table.
这是我不知道如何在 Amazon Redshift 中实现的 (SELECT COUNT(*) FROM VARTABLE_NAME)
部分
CREATE OR REPLACE PROCEDURE SP_LOGGING (VARSTART INT, VARRUNID INT , VARPHASE VARCHAR, VARTABLE_NAME VARCHAR)
AS $$
BEGIN
IF VARSTART = 1 THEN
BEGIN
UPDATE AUDIT.RUN_TEST
SET TABLE_NAME = VARTABLE_NAME
,"no_of_records_at_start" = (SELECT COUNT(*) FROM VARTABLE_NAME)
END;
ELSEIF VARSTART = 0 THEN
BEGIN
UPDATE AUDIT.RUN_TEST
SET TABLE_NAME = VARTABLE_NAME
,"no_of_records_at_end" = (SELECT COUNT(*) FROM VARTABLE_NAME)
END;
END IF;
END;
$$ LANGUAGE PLPGSQL;
您需要使用 EXECUTE
到 运行 动态 SQL。
CREATE PROCEDURE sp_logging (
varstart INT
, varrunid INT
, varphase VARCHAR
, vartable_name VARCHAR )
AS $$
BEGIN
IF varstart = 1 THEN
EXECUTE 'UPDATE audit.run_test
SET table_name = '||vartable_name||'
, start_rows = (SELECT COUNT(*) FROM '||vartable_name||' )';
ELSEIF varstart = 0 THEN
EXECUTE 'UPDATE audit.run_test
SET table_name = '||vartable_name||'
, end_rows = (SELECT COUNT(*) FROM '||vartable_name||')';
ELSE
RAISE ERROR 'Value of `varstart` must be 1 or 0. Received `%`.',varstart;
END IF;
END;
$$ LANGUAGE PLPGSQL;
我想编写一个存储过程,它采用文本参数 (table_name) 并根据该 tablename: select count(*) from 和 that 执行查询将找到的值写入 table.
这是我不知道如何在 Amazon Redshift 中实现的 (SELECT COUNT(*) FROM VARTABLE_NAME)
部分
CREATE OR REPLACE PROCEDURE SP_LOGGING (VARSTART INT, VARRUNID INT , VARPHASE VARCHAR, VARTABLE_NAME VARCHAR)
AS $$
BEGIN
IF VARSTART = 1 THEN
BEGIN
UPDATE AUDIT.RUN_TEST
SET TABLE_NAME = VARTABLE_NAME
,"no_of_records_at_start" = (SELECT COUNT(*) FROM VARTABLE_NAME)
END;
ELSEIF VARSTART = 0 THEN
BEGIN
UPDATE AUDIT.RUN_TEST
SET TABLE_NAME = VARTABLE_NAME
,"no_of_records_at_end" = (SELECT COUNT(*) FROM VARTABLE_NAME)
END;
END IF;
END;
$$ LANGUAGE PLPGSQL;
您需要使用 EXECUTE
到 运行 动态 SQL。
CREATE PROCEDURE sp_logging (
varstart INT
, varrunid INT
, varphase VARCHAR
, vartable_name VARCHAR )
AS $$
BEGIN
IF varstart = 1 THEN
EXECUTE 'UPDATE audit.run_test
SET table_name = '||vartable_name||'
, start_rows = (SELECT COUNT(*) FROM '||vartable_name||' )';
ELSEIF varstart = 0 THEN
EXECUTE 'UPDATE audit.run_test
SET table_name = '||vartable_name||'
, end_rows = (SELECT COUNT(*) FROM '||vartable_name||')';
ELSE
RAISE ERROR 'Value of `varstart` must be 1 or 0. Received `%`.',varstart;
END IF;
END;
$$ LANGUAGE PLPGSQL;