#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;