Помощь, необходимая для синтаксической ошибки с моим простым PL / SQL - PullRequest
0 голосов
/ 26 марта 2019

Я вызываю ссылку на БД с некоторыми PL / SQL, и у меня возникают проблемы с запятыми и каналами. Я пробовал несколько комбинаций, но получаю синтаксические ошибки.

Я перепробовал несколько запятых везде, но безрезультатно :-(

declare
v_sql varchar2(4000);
s_sql varchar2(4000);
l_dblink varchar2(100) := 'DB1';

begin

for c in (select * from my_table)
loop
if 
c.blue_table is not null 
then v_sql := 
'select count(*) from' ||c.schema||'.'||c.table||'@'||'l_dblink;
execute immediate v_sql into s_sql;
dbms_output.put_line(s_sql);
end if;
end loop;
end;
/

Я ожидаю, что он будет проходить по таблице my_table. составьте «SCHEMA.TABLE_NAME» и укажите количество строк.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

У вас есть небольшие проблемы с синтаксисом

declare
  v_sql    varchar2(4000);
  s_sql    pls_integer; -- better to use a numeric type variable for returning result of "count"
  l_dblink varchar2(100) := 'DB1';
begin
  for c in (select * from my_table) loop
    if c.blue_table is not null then
      v_sql := 'select count(*) from ' || c.schema || '.' || c.table || '@' ||l_dblink;
                                  --^ "space needed"                         [^ quote is removed ]
      execute immediate v_sql into s_sql;
      dbms_output.put_line(s_sql);
    end if;
  end loop;
end;
0 голосов
/ 26 марта 2019

Я немного изменил это и понял, что это все еще не работает, с помощью этих парней я разобрался с этим. Спасибо.

declare
v_sql varchar2(4000);
s_sql varchar2(4000);
l_dblink varchar2(100) := 'DB1';

begin


for c in (select * from my_table)
loop
if 
c.blue_table is not null 
then
execute immediate' select count(*) from '||c.schema||'.'||c.table|| '@' ||l_dblink into s_sql;
dbms_output.put_line(s_sql);
end if;
end loop;
end;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...