#amazon-redshift #plpgsql
Вопрос:
Я разработчик Oracle и впервые пишу хранимую процедуру в Amazon Redshift, PL/PGSQL. Мои следующие вопросы, основанные на таблице и процедуре, которые я написал, создали таблицу в красном смещении
CREATE TABLE IF NOT EXISTS mytab
(
x VARCHAR(10) ENCODE lzo
,y NUMERIC(30,4) ENCODE az64
)
DISTSTYLE AUTO
;
CREATE OR REPLACE FUNCTION proc_test(p_1 varchar)
LANGUAGE plpgsql
VOLATILE
AS $function$
DECLARE
V_TEST integer := 0;
BEGIN
select count(*)
from mytab
into V_TEST
WHERE X =P_1;
RAISE NOTICE 'COUNT IS: ',V_TEST;
EXCEPTION
WHEN OTHERS THEN
END;
$function$
;
- Могу ли я не вызывать хранимую процедуру с именованной позиционной нотацией , приведенный ниже вызов выдает мне ошибку
proc_test(p_1 => ‘a’);
, пока это работает, вызовите proc_test( ‘a’); - Моя версия 8.0.2, могу ли я не создавать триггер аудита для этой версии ? (создайте таблицу журнала и выполните аудит изменений?), я создал таблицу журнала и попробовал выполнить приведенный ниже триггер, но он не работает
{ создать или заменить функцию process_tab_audit() ЯЗЫК plpgsql возвращает триггер $$ BEGIN, ЕСЛИ (TG_OP = «ВСТАВИТЬ») ЗАТЕМ ВСТАВЬТЕ В mytab_audit ВЫБЕРИТЕ «I», сейчас(),НОВЫЙ.; ELSIF (TG_OP = «ОБНОВЛЕНИЕ») ЗАТЕМ ВСТАВЬТЕ В mytab_audit ВЫБЕРИТЕ «U», сейчас(),НОВЫЙ. КОНЕЦ, ЕСЛИ;
ВОЗВРАЩАЕТ ЗНАЧЕНИЕ NULL;
КОНЕЦ; $$ }
- Необязательно ли выполнять обработку исключений в PL/PGsql ? Если я не обработаю исключение no_data_found, похоже, программе все равно, что сильно отличается от oracle, где вам абсолютно необходимо с этим справиться
Версия
Tried updating above function so that I can create a trigger, now I get a different error
create or replace function process_tab_audit()
LANGUAGE plpgsql
VOLATILE AS $function$
BEGIN
IF (TG_OP ='INSERT') THEN
INSERT INTO mytab_audit SELECT 'I',now(),NEW.*;
ELSIF (TG_OP ='UPDATE') THEN
INSERT INTO mytab_audit SELECT 'U',now(),NEW.*
END IF;
RETURN NULL;
END; $function$ ;
Ошибка SQL [500310] [42601]: Недопустимая операция Amazon: строка в долларовых кавычках без изменений в «$function$ » или рядом с ней