2010-06-02 2 views
5

SQL Server에서 응용 프로그램에서 sql 코드를 복사하여 SSMS에 붙여 넣을 수 있습니다. &은 SQL에 존재하는 vars를 지정하고 실행합니다. 예, 훌륭한 디버깅 시나리오.SQL에 변수가 포함 된 SQL을 디버그 할 때

예. (나는 녹슨입니다주의와 구문이 잘못되었을 수 있습니다하시기 바랍니다) :

declare @x as varchar(10) 
set @x = 'abc' 
select * from sometable where somefield = @x 

내가 pgAdmin에서 포스트 그레스와 비슷한 (? 또는 다른 포스트 그레스 도구, 권장 사항)을하고 싶지 난 그냥 & PARAMS (내 SQL을 폐기 할 수있는 장소 all)를 Postgres DB에 대해 실행할 항목으로 변환합니다.

필자는 pgscript를 만들 수 있다는 것을 알고 있지만, 위와 같은 작업을 수행 할 경우 @x의 값을 작은 따옴표로 묶지도 않고 매우 좋지 않은 것처럼 보입니다. 그것들을 두배로 만들어서 당신이 테이블을 꺼내지 못하게합니다 ...

현재 나는 누군가가 쓰고있는 SQL을 가지고 있는데, 그 안에는 6 번 사용되는 3 개의 고유 변수가 있습니다. 각각 ...

그래서 다른 사람들이 SQL 을 효율적으로을 디버깅하는 방법으로, SQL Server 일과 비슷한 방식으로 수행하는 것이 좋습니다.

+0

필자는이 기능을 기능 요청으로 추가하고 싶었지만 pgAdmin 메일 링리스트의 작동 원리를 파악할만큼 오래된 학교가 아니었기 때문에 불가능했습니다. ( –

답변

1

명령문을 처리하기 위해 PREPARE, EXECUTE, DEALLOCATE 명령을 사용하면이 작업을 수행 할 수 있습니다. 예를 들어

:

PREPARE test AS SELECT * FROM users WHERE first_name = $1; 
EXECUTE test ('paul'); 
DEALLOCATE test; 

일부는 같은 수 있습니다으로 아마도 같은 그래픽 아니지만, 확실히 가능한.

+0

SQL에서 연결된 서버를 사용하라는 내 대답을 삭제했습니다! 고마워, 그냥 부끄러워 할 수 없다. –

1

쿼리를 래핑하는 SQL function을 쓰는 장면을 보여 드리겠습니다.

CREATE OR REPLACE FUNCTION my_function(integer, integer) 
RETURNS integer 
AS 
$$ 
    SELECT $1 + $2; 
$$ 
LANGUAGE SQL; 

SELECT my_function(1, 2); 

PREPARE 대신 간단하게 업데이트 할 수 있기 때문에이 작업을 수행합니다. 기능이 얼마나 복잡한 지에 따라 Postgres에서 다른 PL's 중 일부를 볼 수도 있습니다.

+0

. SQL을 디버깅해야 할 때마다 함수를 작성해야합니다. 또한 출력이 필요할 것이라고 생각하지 않습니다. –

+0

쿼리에서 변수를 사용하는 방법을 찾고 있다면 귀하의 쿼리를 래핑하는 것은 정말 쉽습니다. 어떤 종류의 출력을 찾고 있습니까? – dcolish

+0

쿼리 또는 디버거 출력을 실행하면 출력이 나옵니다.이것은 확실히 질문에 대한 해결책이 아닙니다. 아마도 대답이 없을 수도 있습니다. 아마도 내가 사용할 수있는 pgAdmin 대안이있을 것이라고 생각했습니다. 난 그냥 SQL 창에 내 코드를 붙여 넣기 내 vars를 설정하고 그것을 실행 싶습니다. –

0

SQL procs는 디버깅하기가 매우 어렵습니다. 내 절름발이하지만 실제 솔루션 (구문 문제를 실례)과 같이 로그 테이블에 로그 메시지를 작성하고있다 : 다음

insert into log_message (message) values ("The value of x is " || @x); 

후 :

create table log_message (
    log_timestamp timestamp not null default current_timestamp, 
    message varchar(1000) 
); 

는 다음처럼 저장된 프로 시저에 행을 추가 실행 :

select * from log_message order by 1; 

그것은별로 좋지는 않지만 모든 DB에서 작동합니다.

+0

나는 그들의 디버깅을 전혀 생각하지 않는다. SQL 서버에있는 Esp입니다. 미안, 이건 내가 원하는게 아니야. –

관련 문제