Проблема с функционированием Oracle - PullRequest
0 голосов
/ 26 января 2012

Это функция fu:

create or replace
FUNCTION pk_max_value(t_name VARCHAR) RETURN NUMBER
is
  rws number;
  pk_column_name varchar(300);
  sql_text VARCHAR(2048);
BEGIN

  sql_text := 'SELECT cols.column_name ' || 
          'FROM all_constraints cons, all_cons_columns cols ' ||
          'WHERE cols.table_name = ' || t_name ||
          ' AND cons.constraint_type = ' || 'chr(39) P chr(39) ' ||
          'AND cons.constraint_name = cols.constraint_name ' ||
          'AND cons.owner = cols.owner ' || 
          'ORDER BY cols.table_name, cols.position;';
  execute immediate sql_text into pk_column_name;

  sql_text := 'SELECT MAX(' || pk_column_name || ')  FROM ' || t_name;
  EXECUTE IMMEDIATE sql_text INTO rws;
  RETURN rws;
END;

, когда я ее выполняю, Oracle дает мне ответ:

Команда SQL неправильно завершена.

Может кто-нибудь сказать мне, где мое падение?

1 Ответ

3 голосов
/ 26 января 2012

Первый sql_text не должен заканчиваться ;

и должно быть:

sql_text := 'SELECT cols.column_name  
      FROM all_constraints cons, all_cons_columns cols 
      WHERE cols.table_name = '''||t_name||''' 
       AND cons.constraint_type = ''P''
       AND cons.constraint_name = cols.constraint_name 
      AND cons.owner = cols.owner  
      ORDER BY cols.table_name, cols.position';

Obs: эта функция не будет работать, если тип ПК не NUMBER.

Obs2: имя_т_ должно быть в верхнем регистре ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...