Не удается получить выходные данные в инструкции select с объединениями. Oracle SQL r12

В разделе —Report Parameters V_ORG_NAMEотображается имя организации, в которой выполняется отчет. Я пытаюсь получить выходные данные для имени поставщика под V_VENDOR_NAME. Я не уверен, что это правильный способ добавить второе IFутверждение. Я считаю, что моя проблема попадает под этот раздел моего кода, но я не уверен, как редактировать: IF '&1' IS NOT NULL
Это вывод ошибок в Oracle:

flex-direction: column;

Я считаю, что эта часть ниже не права, но не уверен, как редактировать или добавлять к нему.

 IF '&1' IS NOT NULL 
 THEN
  SELECT NAME
    INTO V_VENDOR_NAME
  FROM AP.AP_SUPPLIERS
  WHERE VENDOR_ID = '&1';
 END IF;

 :V_VENDOR_NAME := V_VENDOR_NAME;

 END;
 /

 COLUMN V_ORG_ID noprint new_value V_ORG_ID

COLUMN V_VENDOR_ID noprint new_value V_VENDOR_ID

COLUMN V_ORG_NAME noprint new_value V_ORG_NAME

COLUMN V_VENDOR_NAME noprint new_value V_VENDOR_NAME

SELECT :V_VENDOR_ID            V_VENDOR_ID , 
   :V_ORG_ID               V_ORG_ID    ,
   :V_ORG_NAME             V_ORG_NAME  ,
   :V_VENDOR_NAME          V_VENDOR_NAME
FROM SYS.DUAL;

SELECT DATA FROM (
-- Report Header
SELECT '1','INST Supplier Banking' DATA FROM DUAL
UNION ALL
-- Report Parameters
SELECT '2','Vendor: '||'&V_VENDOR_NAME'||' Org: '||'&V_ORG_NAME'
FROM DUAL
UNION ALL
-- Column Headers
select '3','"Vendor Name"|"Supplier Number"|"Site Name"|"Bank Name"|"Bank Number"|"Branch Name"|"Branch Number"|"Account Name"|"Account Number"|"Description"|"Start Date"|"End Date"|"Creation Date"|"Created By"|"Last Update"|"Last Updated By"|"Address Line 1"|"Job Title"|"Email Address"'
FROM DUAL

1 ответ

  1. Похоже, вы путаете переменные привязки и переменные подстановки.

    Переменная Bind-это переменная типа PLSQL, которая должна быть определена заранее и будет» привязана » к инструкции SQL после синтаксического анализа.
    Переменная подстановки-это строка, которая будет» подставлена » в инструкцию SQL перед синтаксическим анализом. Старайтесь цитировать их, иначе они будут интерпретироваться как имена столбцов.

    Ниже вы найдете пример, как объединить их:

    VAR v_bind_name VARCHAR2(30)
    
    BEGIN
        :v_bind_name  := 'Brad';
    END;
    /
    
    SELECT :v_bind_name FROM sys.DUAL;
    
    COLUMN SUBST_NAME NOPRINT NEW_VALUE v_subst_name
    
    SELECT 'Pitt' AS subst_name FROM DUAL;
    
    SELECT :v_bind_name AS first_name, '&V_SUBST_NAME' AS last_name FROM sys.DUAL;
    
    SELECT *
      FROM ( -- Report Header
            SELECT '1', 'INST Supplier Banking' data FROM DUAL
            UNION ALL
            -- Report Parameters
            SELECT '2', 'Vendor: ' || :v_bind_name || ' Org: ' || '&V_SUBST_NAME' FROM DUAL
            UNION ALL
            -- Column Headers
            SELECT '3', '"Vendor Name"|"Supplier Number"|"Site Name"|"Bank Name"|"Bank Number"|"Branch Name"' FROM DUAL);