Вопрос PL/PGSQL — Красное смещение — процедура вызова, триггер аудита и обработка исключений

#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$
;
 
  1. Могу ли я не вызывать хранимую процедуру с именованной позиционной нотацией , приведенный ниже вызов выдает мне ошибку
    proc_test(p_1 => ‘a’);
    , пока это работает, вызовите proc_test( ‘a’);
  2. Моя версия 8.0.2, могу ли я не создавать триггер аудита для этой версии ? (создайте таблицу журнала и выполните аудит изменений?), я создал таблицу журнала и попробовал выполнить приведенный ниже триггер, но он не работает

    { создать или заменить функцию process_tab_audit() ЯЗЫК plpgsql возвращает триггер $$ BEGIN, ЕСЛИ (TG_OP = «ВСТАВИТЬ») ЗАТЕМ ВСТАВЬТЕ В mytab_audit ВЫБЕРИТЕ «I», сейчас(),НОВЫЙ.; ELSIF (TG_OP = «ОБНОВЛЕНИЕ») ЗАТЕМ ВСТАВЬТЕ В mytab_audit ВЫБЕРИТЕ «U», сейчас(),НОВЫЙ. КОНЕЦ, ЕСЛИ;

    ВОЗВРАЩАЕТ ЗНАЧЕНИЕ NULL;

    КОНЕЦ; $$ }

  3. Необязательно ли выполнять обработку исключений в PL/PGsql ? Если я не обработаю исключение no_data_found, похоже, программе все равно, что сильно отличается от oracle, где вам абсолютно необходимо с этим справиться

Версия

версия postgres

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$ » или рядом с ней