2014-01-28 3 views
0

그래서 일부 설계상의 이유로 다른 엔티티에 매핑 할 때 외래 키를 사용할 수없는 테이블이 있습니다. 그래서 안전하게 미디어 테이블에서 항목을 삭제하기 위해 호출되는 함수로 작업하고 있습니다. 현재로서는이 리소스를 사용하여 쿼리에 테이블 이름을 동적으로 삽입하는 방법을 안내하는 기본적인 기능을 제공하는 함수를 작성했습니다 (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); 
+1

Postgres (및 SQL)의 문자열 리터럴은 따옴표가 아닌 [apostrphes] (http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS)를 사용합니다. –

답변

0

Milen A. Radev는 내가 잘못된 문자열을 사용하여 문자열을 식별했음을 지적하면서이를 이스케이프 처리 된 문자열로 전환하고 문제를 해결했습니다.

관련 문제