[SQL] PostgreSQL의 쿼리에 변수를 선언하는 방법
SQLPostgreSQL의 쿼리에 변수를 선언하는 방법
어떻게 PostgreSQL의 8.3 쿼리에 사용할 수있는 변수를 선언합니까?
에서 MS SQL 서버 나는이 작업을 수행 할 수 있습니다
DECLARE @myvar INT
SET @myvar = 5
SELECT *
FROM somewhere
WHERE something = @myvar
어떻게 PostgreSQL의에서 동일한 작업을 수행합니까? : 그러나 이것은 나에게 구문 오류가 있습니다; "이름 유형"변수는 단순히 선언 된 문서에 따르면,
myvar INTEGER;
누군가가 나에게 올바른 구문의 예를 들어 줄 수 있을까?
해결법
-
==============================
1.PostgreSQL의에서 그런 기능이 없다. 당신은 할 수 그것은 단지에서 PL / pgSQL의 (또는 다른 PL / *)가 아닌 일반 SQL있다.
PostgreSQL의에서 그런 기능이 없다. 당신은 할 수 그것은 단지에서 PL / pgSQL의 (또는 다른 PL / *)가 아닌 일반 SQL있다.
예외 변수 또는 변수에도 튜플 일 수 () 쿼리이다. 그것은 당신이 임시 값의 테이블을 반환 할 수 있습니다.
WITH master_user AS ( SELECT login, registration_date FROM users WHERE ... ) SELECT * FROM users WHERE master_login = (SELECT login FROM master_user) AND (SELECT registration_date FROM master_user) > ...;
-
==============================
2.나는 WITH 절을 사용하여 같은 목표를 달성, 그것은 우아한로 갑자기 근처의하지만 같은 일을 할 수 있습니다. 이 예를 들어 있지만 정말 잔인한 사람입니다. 나는 또한 특히이 사용하지 않는 것이 좋습니다.
나는 WITH 절을 사용하여 같은 목표를 달성, 그것은 우아한로 갑자기 근처의하지만 같은 일을 할 수 있습니다. 이 예를 들어 있지만 정말 잔인한 사람입니다. 나는 또한 특히이 사용하지 않는 것이 좋습니다.
WITH myconstants (var1, var2) as ( values (5, 'foo') ) SELECT * FROM somewhere, myconstants WHERE something = var1 OR something_else = var2;
-
==============================
3.또한 PLPGSQL이 시도해 볼 수도 있습니다 :
또한 PLPGSQL이 시도해 볼 수도 있습니다 :
DO $$ DECLARE myvar integer; BEGIN SELECT 5 INTO myvar; DROP TABLE IF EXISTS tmp_table; CREATE TABLE tmp_table AS SELECT * FROM yourtable WHERE id = myvar; END $$; SELECT * FROM tmp_table;
위는 포스트 그레스 9.0 이상이 필요합니다.
-
==============================
4.그것은 당신의 클라이언트에 따라 달라집니다.
그것은 당신의 클라이언트에 따라 달라집니다.
당신은 psql의 클라이언트를 사용하는 경우, 당신은 다음을 사용할 수 있습니다 :
my_db=> \set myvar 5 my_db=> SELECT :myvar + 1 AS my_var_plus_1; my_var_plus_1 --------------- 6
텍스트 변수를 사용하는 경우는 인용 할 필요가있다.
\set myvar 'sometextvalue' select * from sometable where name = :'myvar';
-
==============================
5.당신이 위해 할 수있는 "학대"동적 구성 설정 :
당신이 위해 할 수있는 "학대"동적 구성 설정 :
-- choose some prefix that is unlikely to be used by postgres set session my.vars.id = '1'; select * from person where id = current_setting('my.vars.id')::int;
당신이 그들을 사용할 때 올바른 데이터 형식에 캐스팅 할 필요가 있도록 구성 설정은 항상 VARCHAR 값입니다. 어떤 SQL 클라이언트와이 작품 \ 세트는 psql의 작동 반면,
위는 포스트 그레스 9.2 이상이 필요합니다.
이전 버전의 경우, 변수 때문에 다소의 유용성을 제한, 사용하기 전에 postgresql.conf의 선언되어야했다. 실제로 완전하게 변수지만, 본질적으로 접두사 인 설정 "클래스". 접두사를 정의하지만, 일단 모든 변수는 postgresql.conf의 변경없이 사용할 수
-
==============================
6.제안 PL / pgSQL의 다른 PL / * 언어를 사용하는 외부, 이것은 내가 생각할 수있는 유일한 가능성이다.
제안 PL / pgSQL의 다른 PL / * 언어를 사용하는 외부, 이것은 내가 생각할 수있는 유일한 가능성이다.
begin; select 5::int as var into temp table myvar; select * from somewhere s, myvar v where s.something = v.var; commit;
-
==============================
7.나는 그것을 간단하게 활용하여 임시 테이블을 만들기 위해, DarioBarrionuevo의 대답 @에 개선을 제안하고 싶다.
나는 그것을 간단하게 활용하여 임시 테이블을 만들기 위해, DarioBarrionuevo의 대답 @에 개선을 제안하고 싶다.
DO $$ DECLARE myvar integer = 5; BEGIN CREATE TEMP TABLE tmp_table ON COMMIT DROP AS -- put here your query with variables: SELECT * FROM yourtable WHERE id = myvar; END $$; SELECT * FROM tmp_table;
-
==============================
8.이 솔루션은 fei0x에 의해 제안 된 하나를 기반으로하지만, 쉽게 쿼리의 시작 부분에 나열 할 수 쿼리 상수와 상수의 값리스트에 가입 할 필요가 없다는 장점을 가지고있다. 또한 재귀 쿼리에서 작동합니다.
이 솔루션은 fei0x에 의해 제안 된 하나를 기반으로하지만, 쉽게 쿼리의 시작 부분에 나열 할 수 쿼리 상수와 상수의 값리스트에 가입 할 필요가 없다는 장점을 가지고있다. 또한 재귀 쿼리에서 작동합니다.
기본적으로, 모든 일정은 다음 쿼리의 나머지 부분에 어디서든 호출 할 수 WITH 절에서 선언 한 값 테이블입니다.
WITH constant_1_str AS (VALUES ('Hello World')), constant_2_int AS (VALUES (100)) SELECT * FROM some_table WHERE table_column = (table constant_1_str) LIMIT (table constant_2_int)
또는 당신은 PostgreSQL 대신에 다른 다른 쿼리 언어에 대한 유효하지 않을 수 표 constant_name의 constant_name로부터 SELECT *를 사용할 수 있습니다.
-
==============================
9.여기에 문을 PREPARE 사용 예입니다. ? 당신은 여전히 사용할 수 없습니다,하지만 당신은 $ N 표기법을 사용할 수 있습니다 :
여기에 문을 PREPARE 사용 예입니다. ? 당신은 여전히 사용할 수 없습니다,하지만 당신은 $ N 표기법을 사용할 수 있습니다 :
PREPARE foo(integer) AS SELECT * FROM somewhere WHERE something = $1; EXECUTE foo(5); DEALLOCATE foo;
-
==============================
10.사실, 단일 값 변수를 선언 할 선명하고 명확한 방법이, 당신이 할 수있는 일입니다입니다
사실, 단일 값 변수를 선언 할 선명하고 명확한 방법이, 당신이 할 수있는 일입니다입니다
with myVar as (select "any value really")
다음,이 구조에 저장된 값에 액세스하려면, 당신이 할
(select * from myVar)
예를 들면
with var as (select 123) ... where id = (select * from var)
-
==============================
11.당신은 도구의 특별한 기능에 의존 할 수있다. DBeaver에 대한처럼 독자적인 문법을 가지고 :
당신은 도구의 특별한 기능에 의존 할 수있다. DBeaver에 대한처럼 독자적인 문법을 가지고 :
@set name = 'me' SELECT :name; SELECT ${name}; DELETE FROM book b WHERE b.author_id IN (SELECT a.id FROM author AS a WHERE a.name = :name);
-
==============================
12.이 작업을 할 수 있도록 DBeaver에서 당신은, 당신이 코드에서 할 수처럼 쿼리에서 매개 변수를 사용할 수 있습니다 :
이 작업을 할 수 있도록 DBeaver에서 당신은, 당신이 코드에서 할 수처럼 쿼리에서 매개 변수를 사용할 수 있습니다 :
SELECT * FROM somewhere WHERE something = :myvar
쿼리를 실행할 때 DBeaver는 값를 묻습니다 : myVar에 쿼리를 실행합니다.
from https://stackoverflow.com/questions/1490942/how-to-declare-a-variable-in-a-postgresql-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은 NULL (성능 및 스토리지) (0) | 2020.03.14 |
---|---|
[SQL] 오라클 "(+)"운영자 (0) | 2020.03.14 |
[SQL] SQL Server의 LIMIT 10 ... 20 (0) | 2020.03.14 |
[SQL] 오라클에서 테이블에서 중복 행을 제거 (0) | 2020.03.14 |
[SQL] SQL 쿼리는 두 날짜 사이의 날짜를 선택합니다 (0) | 2020.03.14 |