그래서 일부 설계상의 이유로 다른 엔티티에 매핑 할 때 외래 키를 사용할 수없는 테이블이 있습니다. 그래서 안전하게 미디어 테이블에서 항목을 삭제하기 위해 호출되는 함수로 작업하고 있습니다. 현재로서는이 리소스를 사용하여 쿼리에 테이블 이름을 동적으로 삽입하는 방법을 안내하는 기본적인 기능을 제공하는 함수를 작성했습니다 (http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN). 그것은postgresql 함수의 테이블 이름을 동적으로 지정합니다.
DECLARE
rows_returned numeric;
is_media boolean;
BEGIN
DELETE FROM solo_media WHERE entity_id = row_to_delete;
EXECUTE "DELETE FROM $1 WHERE id = $2;" INTO rows_returned USING table_name, row_to_delete;
END;
을 다음과 같이 그리고 그것 (에 전달되는 TABLE_NAME 및 row_to_delete 인 매개 변수) 실행 때 내 쿼리가
로를 호출 할 때 나는 오류ERROR: column "DELETE FROM $1 WHERE id = $2;" does not exist LINE 1: SELECT "DELETE FROM $1 WHERE id = $2;" ^ QUERY: SELECT "DELETE FROM $1 WHERE id = $2;" CONTEXT: PL/pgSQL function "safe_del" line 7 at EXECUTE statement
를 얻을 기록의 약자로
SELECT safe_del(tableName, rowNumber);
Postgres (및 SQL)의 문자열 리터럴은 따옴표가 아닌 [apostrphes] (http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS)를 사용합니다. –