2015-08-05 6 views
0

У меня есть две таблицы, и когда я делаю вставку, я не хочу передавать данные, созданные, я хочу поставить sysdate. У меня есть следующий код:изменить данные при обновлении

create or replace procedure procedure1 as 
begin 
    INSERT INTO tlp 
      (given_name, 
      namel, 
      email, sysdate) 
SELECT first_name, 
     namel, 
     mail 
FROM glob 
WHERE (NOT EXISTS (SELECT email 
        FROM tlp 
        WHERE glob.mail = tlp.email) 
     AND glob.mail IS NOT NULL) 
     OR (NOT EXISTS (SELECT namel 
         FROM tlp 
         WHERE glob.namel = tlp.namel) 
      --AND glob.mail IS NULL 
      ); 
end procedure1; 
+0

Oracle или SQL Server? – Fred

+0

извините просто sql и oracle sqldeveloper – uid

+0

добавить новый столбец getdate() в качестве sysdate в вашем заявлении select –

ответ

0

В вашем procedure для insert, количество столбцов данных для таблицы tlp является 4 и columns выбран из таблицы glob является 3.

Если вы хотите insertsysdate для одного столбца таблицы tlp, а затем указать имя столбца и добавить sysdate в select заявлении.

Предполагая, что структура таблицы из tlp является

tlp (
    given_name, 
    namel, 
    email, 
    date_created --if clmn name is not "date_created", then change it in the proc. 
) 

Теперь попробуйте это;

create or replace procedure 
procedure1 as 
begin 
    INSERT INTO tlp (
    given_name, namel, 
    email, date_created 
) 
    SELECT 
    first_name, namel, 
    mail, sysdate --note sysdate is given in select query 
    FROM glob 
    WHERE (
    NOT EXISTS (
     SELECT email 
     FROM tlp 
     WHERE glob.mail = tlp.email 
    ) 
    AND glob.mail IS NOT NULL 
) OR ( 
    NOT EXISTS (
     SELECT namel 
     FROM tlp 
     WHERE glob.namel = tlp.namel 
    ) 
    --AND glob.mail IS NULL 
); 
end procedure1; 
1
create or replace procedure procedure1 as 
begin 
    INSERT INTO tlp 
      (given_name, 
      namel, 
      email, sysdate) 
SELECT first_name, 
     namel, 
     mail, 
     GETDATE() as sysdate  
FROM glob 
WHERE (NOT EXISTS (SELECT email 
        FROM tlp 
        WHERE glob.mail = tlp.email) 
     AND glob.mail IS NOT NULL) 
     OR (NOT EXISTS (SELECT namel 
         FROM tlp 
         WHERE glob.namel = tlp.namel) 
      --AND glob.mail IS NULL 
      ); 
end procedure1; 
+0

добавить столбец в select getdate() as sysdate –

+0

он не работает и столбец Я не могу добавить, потому что у меня нет разрешения – uid

+0

Если у вас есть разрешение на изменение таблицы, вы можете выполнить: ALTER TABLE tlp ADD CONSTRAINT [DF_tlp_sysdate] DEFAULT (getdate()) FOR [sysdate] –