2010-02-25 3 views
2

선언 한 변수를 사용하여 DB2 용 IBM System I 네비게이터 도구에서 일부 특별 선택문을 실행하고 싶습니다 .DB2 - IBM System i Access에서 매개 변수가있는 임시 선택 쿼리를 실행하는 방법 Windows GUI 도구

예를 들어, SQL Server의 세계에서 나는 쉽게 그래서 같이 SQL Server Management Studio의 쿼리 창에서이 작업을 수행 할 것입니다 :

DECLARE @VariableName varchar(50); 
SET @VariableName = 'blah blah'; 

select * from TableName where Column = @VariableName; 

는 어떻게 IBM 시스템 I 네비게이터 도구에서 비슷한 일을 할 수 있습니까?

+0

누가 알 때까지

CREATE OR REPLACE VARIABLE variableName VARCHAR(50); SET variableName = 'blah'; SELECT * FROM table WHERE column = variableName; DROP VARIABLE variableName; 

는 주위 중단됩니다. 그러나 어쨌든 아무 필요도 없어야합니다. DECLARE 문과 변수 이름 및 해당 값을 입력 할 수 있으면 해당 값을 임의의 문에 간단히 입력하거나 붙여 넣거나 찾거나 바꾸기 만하면됩니다. 변수가 필요한 이유는 무엇입니까? (그러나 때때로 나는 하나를 원했음에 주목한다. 나는 왜 다른 사람들이 그 이유를 원하는지 더 관심이있다.) – user2338816

+0

한 번 이상 반복하지 않을 변수를 참조하는 쿼리가있는 이유 중 하나는 여러 번 값을 붙여 넣으십시오. –

+0

하지만 찾기/바꾸기 (모두)가 사용되는 경우도 있습니다. 몇 번의 마우스 클릭만으로도 비용이 발생합니다. – user2338816

답변

5

동일한 질문을 검색하는 동안이 게시물을 가로 질렀습니다. 저의 동료가 대답을주었습니다. 실제로 Navigator의 임시 SQL 문에서 변수를 선언 할 수 있습니다. 이것은 수행하는 방법이다 : 당신이 변수 이름을 드롭하지 않으면 내가 7.1까지에 iNav 더 "변수"기능이없는 경우 ...

+1

SQL 상태 : 42601 공급 업체 코드 : -104 메시지 : [SQL0104] 토큰 OR이 유효하지 않음 – ajeh

+0

이전 버전을 사용해야 함 .. 7.1에서 CREATE OR REPLACE 지원이 추가되었습니다. 전역 변수 지원과 마찬가지로 – Charles

+0

스키마를 지정해야했습니다. 변수를 생성하려면 ...'CREATE OR REPLACE VARIABLE schema.variable DECIMAL (8,0);'... and'SET schema.variable = 20170721;' – Dave

1

현재 우리는 직장에서 같은 문제에 대해 작업하고 있습니다. 유감스럽게도, 우리는 이것이 불가능하다고 결론지었습니다. 나는 동의한다, 그것은 좋을 것이다. 그러나 그것은 단지 그렇게 일하지 않는다. iNavigator는 SET 또는 Define을 지원하지 않습니다. 내장 SQL에서는이 작업을 수행 할 수 있지만이 작업은 내장 SQL이 아닙니다. 별도의 문서 (xxx.sql)를 작성한 경우에도 스크립트를 실행하기 위해이 문서를 열어야 대화식 스크립트가 작성됩니다 (즉, DECLARE SECTION은 허용되지 않습니다).

대신 SQL 화면/스크립트에서 CL :을 사용할 수 있습니다. 이 접두어 다음에 오는 것은 CL 명령으로 실행됩니다. 이런 식으로 테이블 (예 : RNMF)을 조작 할 수 있습니다.

iSeries는 Rexx 스크립트 (os와 함께 기본 설치됨)를 지원합니다. Rexx는 좋은 동적 스크립트 언어이며 Embedded SQL을 지원합니다. 나는 많은 시간을 해냈고 훌륭하게 작동합니다. 나는 프로덕션 환경을위한 스크립트도 만들었습니다.

예제 PREPARE 및 CURSOR 문으로 하나의 '기본'스크립트를 만들고 마음대로 복사하십시오. 그 스크립트로 당신은 놀 수 있습니다. exec-sql의 올바른 구문은 Rexx 매뉴얼을 참조하십시오. 또한 STDIN 및 STDOUT이 있지만 'OVRDBF'를 사용하여 데이터베이스 테이블 (실제 파일)을 가리킬 수 있습니다. Rexx 예제 스크립트가 필요한지 알려주세요.

매뉴얼 "SQL embedded programming"에는 Rexx 예제가 있습니다.

+0

Hmmmmm ... 내가 바라던 대답이 아니야! :-( "우리가 이야기 할 수있는 다른 사람이 있습니까?"(Monty Python and the Holy Grail (1975) –

+0

계속 진행된다면 문제는 계속 될 것입니다.하지만 "ad hoc sql + 변수 "는 필요한 것입니다. Rexx를 실제로 시도해야합니다. 따라서 임베디드 sql : 소스를 편집하고 저장하고 실행하십시오.) – robertnl

0

다음은 몇 가지 다른 대안입니다.

데이터 전송 도구 - 명령 행 (RTOPCB)에서 iSeries 데이터 전송 도구를 실행할 수 있습니다. 먼저, GUI 버전을 실행하고 정의 파일을 작성하십시오. 이 파일을 텍스트 편집기로 편집하면이 파일은 구식 INI 파일이라는 것을 알 수 있으며이 파일에있는 쿼리가있는 행을 쉽게 찾을 수 있습니다. 여기에서 배치 파일을 작성하거나 텍스트 파일을 사전 처리하여 조회 도구에 제출하기 전에 조회를 조작 할 수 있습니다.

QSHELL - 대화 형은 iSeries에 로그온 할 수있는 경우 (REXX 재미의 종류가 있지만), 당신은 CL 또는 REXX보다 더 익숙한 QSHELL 환경을 찾을 수 있습니다. QSHELL은 iSeries에서 실행되는 완전한 POSIX 환경입니다. STRQSH 명령을 사용하여 QSHELL을 시작하십시오. 쉘로 ksh 또는 csh를 사용할 수 있습니다. QSHELL에는 쿼리를 제출하는 "db2"라는 명령이 있습니다. 그래서, 당신은 QSHELL 내에서 같은 것을 할 수 있어야한다 : 당신은 올바르게 전달하는 KSH을 얻기 위해 따옴표와 함께 바이올린 할 수 있습니다

system> VariableName = 'blah blah' 
system> db2 "select * from TableName where Column = \'$VariableName\'" 

.

또한 QSHELL 내부에는 DBI를 사용하여 데이터를 얻을 수있는 완전한 Perl 설치가 있어야합니다.

iSeries에서 데이터와 상호 작용하는 몇 가지 다른 방법 : ODBC를 통해 Python을 사용하여 클라이언트의 조회; JDBC를 통해 자이 썬으로 클라이언트의 질의; iSeries에 Jython을 직접 설치 한 다음 JDBC를 통해 조회하십시오.