я хочу вставить в эту процедуру только
Вы можете просто использовать insert ... select
[синтаксис]:
CREATE OR REPLACE PROCEDURE FIP_VALID_TBL_TRANSMEDIA
(
POUTMSG OUT VARCHAR2
)
AS
BEGIN
INSERT INTO TBL_VLD_FIBERINV_DATA (SNAP_ID, MAINT_ZONE_CODE)
SELECT TO_CHAR(sp.RJ_SPAN_ID), TO_CHAR(sp.RJ_MAINTENANCE_ZONE_CODE)
...
MINUS
SELECT TO_CHAR(sp.RJ_SPAN_ID), TO_CHAR(sp.RJ_MAINTENANCE_ZONE_CODE)
...
Вам не нужно distinct
с МИНУСОМ; а псевдонимы столбцов бесполезны.
Или, если вы хотите установить другие столбцы, и они еще не установлены по умолчанию, вы можете включить значения для них в часть запроса - здесь, используя системное время и текущий пользователь:
INSERT INTO TBL_VLD_FIBERINV_DATA (SNAP_ID, MAINT_ZONE_CODE, UPDATED_DATE, UPDATED_BY)
SELECT TO_CHAR(sp.RJ_SPAN_ID), TO_CHAR(sp.RJ_MAINTENANCE_ZONE_CODE), SYSDATE, USER
...
MINUS
SELECT TO_CHAR(sp.RJ_SPAN_ID), TO_CHAR(sp.RJ_MAINTENANCE_ZONE_CODE), SYSDATE, USER
...
Вам нужно выполнить процедуру, чтобы он действительно что-то делал; просто создание или компиляция не приводит к запуску кода внутри него (т.е. вставки). Вы можете сделать это из простого анонимного блока:
DECLARE
OUTMSG VARCHAR2(4000);
BEGIN
FIP_VALID_TBL_TRANSMEDIA (POUTMSG => OUTMSG);
END;
/
Вы должны объявить и передать переменную в соответствии с формальным аргументом процедуры, даже если вы в настоящее время не заполняете это. (Надеюсь, вы не собираетесь перехватывать исключения и помещать сообщение об исключении в эту переменную ...)
Кажется немного странным использовать nvarchar2
в вашей целевой таблице и иметь размер как 100 даже для идентификатора пользователя; и to_char()
вызывает то, что уже выглядит как строки. Вы используете функцию to_char(char)
, которая всегда возвращает varchar2
, поэтому вставка в nvarchar2
кажется странной ...