IIB: передача локальной переменной в оператор выбора ESQL

Мне нужно получить данные из двух таблиц, основываясь на коде задания, который указан во входных данных xml в IIB / WMB.

SQL-запрос

SELECT D.DEPTNO,D.DNAME,D.LOC,E.EMPNO,E.ENAME,E.JOB,E.SAL FROM DEPT D JOIN EMP E on E.JOB ='MANAGER' OR E.JOB = 'CLERK'

ESQL Query

Получение сведений о JOB из входного XML-файла и назначение его локальной переменной.

SET type1 = InputRoot.XMLNSC.Employee.Type[1];
SET type2 = InputRoot.XMLNSC.Employee.Type[2];

Теперь мне нужно передать вышеуказанные переменные в мой запрос ESQL.

SET Outputroot.XMLNSC.List[] = PASSTHRU('SELECT D.DEPTNO,D.DNAME,D.LOC,E.EMPNO,E.ENAME,E.JOB,E.SAL FROM Database.EMP AS E,Database.DEPT AS D where E.JOB =?' VALUES('type1','type2')) ;

Но приведенный выше запрос не работает.

4 ответа

Решение

В этом запросе есть две проблемы:

Во-первых, вы передаете два параметра, но в запросе существует только один знак вопроса (?).

Во-вторых, вы передаете строковое значение типа 'type1', и правильно передать переменную:

SET Outputroot.XMLNSC.List[] = PASSTHRU('SELECT D.DEPTNO,D.DNAME,D.LOC,E.EMPNO,E.ENAME,E.JOB,E.SAL FROM Database.EMP AS E,Database.DEPT AS D where E.JOB =?' VALUES(type1)) ;

Вот решение:

    DECLARE designation char;
       DECLARE designation1 char;
       DECLARE Query char;



      FOR source AS InputRoot.XMLNSC.Employees.Designation[]  DO
                IF(source = '') THEN
                    SET designation = 'Empty';
                ELSE        
                    SET designation = designation1 ||''''||UPPER(source)||'''';                     
                SET designation1 = ''''||UPPER(source)||''''||','||designation1 ;

            END IF;      


SET Query = '(SELECT D.DEPTNO,D.DNAME,D.LOC,E.EMPNO,E.ENAME,E.JOB,E.SAL FROM EMP AS E JOIN DEPT AS D on D.DEPTNO = E.DEPTNO where E.JOB in ('||designation||'))';

SET Outputroot.XMLNSC.List[] = PASSTHRU(Query);

Добавлять To Database.DBName после вашего оператора PASSTHRU, где DBName - это имя вашей базы данных

Как это:

SET Outputroot.XMLNSC.List[] = PASSTHRU('SELECT D.DEPTNO,D.DNAME,D.LOC,E.EMPNO,E.ENAME,E.JOB,E.SAL FROM Database.EMP AS E,Database.DEPT AS D where E.JOB =?' VALUES(type1)) To Database.DBName ;

Проходящий вызов должен быть

SET Outputroot.XMLNSC.List[] = PASSTHRU('SELECT D.DEPTNO,D.DNAME,D.LOC,E.EMPNO,E.ENAME,E.JOB,E.SAL FROM Database.EMP AS E,Database.DEPT AS D where E.JOB in (? , ?)', type1,type2) ;

ИЛИ ЖЕ

SET Outputroot.XMLNSC.List[] = PASSTHRU('SELECT D.DEPTNO,D.DNAME,D.LOC,E.EMPNO,E.ENAME,E.JOB,E.SAL FROM Database.EMP AS E,Database.DEPT AS D where E.JOB=? or E.JOB=?)', type1,type2) ;
Другие вопросы по тегам