[SQL] PostgreSQL의에서 문자열 값 (같은 평가) 내부 쿼리를 실행할 수있는 방법이 있습니까?
SQLPostgreSQL의에서 문자열 값 (같은 평가) 내부 쿼리를 실행할 수있는 방법이 있습니까?
나는 이런 식으로하고 싶지 :
SELECT (EVAL 'SELECT 1') + 1;
PostgreSQL의이 (EVAL)처럼 할 수있는 방법이 있습니까?
해결법
-
==============================
1.당신이 "평가"하려고하는 문은 항상 동일한 데이터 형식을 반환하는 경우, 당신은 사용이 그르 언급 EXECUTE 것으로 평가 후면 () 함수를 작성할 수 있습니다.
당신이 "평가"하려고하는 문은 항상 동일한 데이터 형식을 반환하는 경우, 당신은 사용이 그르 언급 EXECUTE 것으로 평가 후면 () 함수를 작성할 수 있습니다.
create or replace function eval(expression text) returns integer as $body$ declare result integer; begin execute expression into result; return result; end; $body$ language plpgsql
그럼 당신은 같은 뭔가를 할 수
SELECT eval('select 41') + 1;
동적 문은 당신이 평가하려는 각 표현 뭔가 다른를 반환하지만이 방법은 작동하지 않습니다.
이 임의의 문장을 실행하여 큰 보안 위험을 여는 또한 명심. 그게 문제가 될 경우 사용자의 환경에 따라 달라집니다. 그는 대화 형 SQL 세션에서 사용하는 경우 그것은 문제가되지 않습니다.
-
==============================
2.언어 PLpgSQL 구문이 있다고 가정하는 여러 가지 방법을 :
언어 PLpgSQL 구문이 있다고 가정하는 여러 가지 방법을 :
Y := f(X);
실행] 절은, 전용 "동적 실행"(이하 성능)입니다
EXECUTE 'f(X)' INTO Y;
사용 Y = F (X); 또는, 정적 선언을 실행하기위한 SELECT
SELECT f(X) INTO Y;
결과를 폐기 또는 무효 반환과 함께 일을 할 때 사용 문을 수행합니다 :
PERFORM f(X);
-
==============================
3.이 필요한 경우처럼 :: INT 캐스팅 연산자를 사용하여 더 유연하기 때문에 나는 데이터 형식의 텍스트로 갈 것 :
이 필요한 경우처럼 :: INT 캐스팅 연산자를 사용하여 더 유연하기 때문에 나는 데이터 형식의 텍스트로 갈 것 :
create or replace function eval( sql text ) returns text as $$ declare as_txt text; begin if sql is null then return null ; end if ; execute sql into as_txt ; return as_txt ; end; $$ language plpgsql -- select eval('select 1')::int*2 -- => 2 -- select eval($$ select 'a'||1||'b' $$) -- => a1b -- select eval( null ) -- => null
I의이 다른 평가를 첨가 (SQL, keys_arr, vals_arr) 함수 일부 사용자 키 값 대체를지지, 예를 들어 포스트 그레스 - 유틸에 PARAM1 대체 : 편리를위한
-
==============================
4.당신을 맞는하지만 PostgreSQL의 EXECUTE 문을 가지고 있는지 확실하지 않다.
당신을 맞는하지만 PostgreSQL의 EXECUTE 문을 가지고 있는지 확실하지 않다.
-
==============================
5.좋은 생각. 당신은 직접적인 표현을 수행하기 위해 수정할 수 있습니다 :
좋은 생각. 당신은 직접적인 표현을 수행하기 위해 수정할 수 있습니다 :
create or replace function eval(expression text) returns integer as $body$ declare result integer; begin execute 'SELECT ' || expression into result; return result; end; $body$ language plpgsql;
그냥이 입력 실행하려면 :
SELECT eval('2*2');
from https://stackoverflow.com/questions/7433201/are-there-any-way-to-execute-a-query-inside-the-string-value-like-eval-in-post by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 .. SQL 서버에서 전역 변수를 선언하려면? (0) | 2020.04.21 |
---|---|
[SQL] 쉼표 데이터베이스 필드에 값을 구분 (0) | 2020.04.21 |
[SQL] 문자열 열이 절 사이에 SQL (0) | 2020.04.21 |
[SQL] 절과 절에서 테이블 조인을 떠날 때 경우의 차이점은 무엇입니까? (0) | 2020.04.21 |
[SQL] SQL 서버 * = 연산자? (0) | 2020.04.21 |