Как восстановить оператор declare?

#oracle #plsql #declare #ora-06550 #pls-00103

#Oracle #plsql #объявить #ora-06550 #pls-00103

Вопрос:

Не могли бы вы мне помочь, пожалуйста, исправьте следующую инструкцию SQL, у меня ошибка в первой строке. Спасибо

 DECLARE @T_SYS_FROM SMALLINT,VARCHAR(8);
    SET @T_SYS_FROM = 20200922,DATE;
    SELECT 
      T_SYS_FROM, 
      N_D_AHDJ,
      N_FUND_ID,
      N_AHDJ,
      T_SYS_USER,
      BUDAT
    FROM 
      dss.acn_ahdj_h
    where
      T_SYS_FROM=@ T_SYS_FROM
    ORDER by
      T_SYS_USER;
  

Комментарии:

1. это далеко не допустимый PL / SQL

2. Это не оператор SQL; это оператор PL / SQL (и, похоже, использует синтаксис из другого диалекта SQL, а не синтаксис Oracle). PL / SQL — это процедурный язык Oracle, который отличается от SQL.

3. пожалуйста, поделитесь, какую ошибку вы получаете

4. Я предлагаю вам сначала немного почитать. Возможно, начните с 2-дневного руководства разработчика , затем перейдите к концепциям баз данных Oracle . Они довольно сухие, но содержат массу информации.

Ответ №1:

DECLARE Похоже, что вы берете синтаксис из другого диалекта SQL, потому что это недопустимый синтаксис Oracle PL / SQL.

Если вы используете PL / SQL, то что-то вроде (при условии, что ваш запрос вернет ровно одну строку):

 DECLARE 
  v_your_date DATE := DATE '2020-09-22';
  v_T_SYS_FROM dss.acn_ahdj_h.T_SYS_FROM%TYPE;
  v_N_D_AHDJ   dss.acn_ahdj_h.N_D_AHDJ%TYPE;
  v_N_FUND_ID  dss.acn_ahdj_h.N_FUND_ID%TYPE;
  v_N_AHDJ     dss.acn_ahdj_h.N_AHDJ%TYPE;
  v_T_SYS_USER dss.acn_ahdj_h.T_SYS_USER%TYPE;
  v_BUDAT      dss.acn_ahdj_h.BUDAT%TYPE;
BEGIN
  SELECT T_SYS_FROM, 
         N_D_AHDJ,
         N_FUND_ID,
         N_AHDJ,
         T_SYS_USER,
         BUDAT
  INTO   v_T_SYS_FROM, 
         v_N_D_AHDJ,
         v_N_FUND_ID,
         v_N_AHDJ,
         v_T_SYS_USER,
         v_BUDAT
  FROM   dss.acn_ahdj_h
  WHERE  T_SYS_FROM = v_your_date
  ORDER BY T_SYS_USER;
END;
/
  

Если вам нужен SQL-запрос, то:

 SELECT T_SYS_FROM, 
       N_D_AHDJ,
       N_FUND_ID,
       N_AHDJ,
       T_SYS_USER,
       BUDAT
FROM   dss.acn_ahdj_h
WHERE  T_SYS_FROM = DATE '2020-09-22'
ORDER BY T_SYS_USER;