2012-01-26 10 views
0

これはfuの機能である:Oracleの機能のトラブル

SQLコマンドが正常に終了していない:私はこれを実行すると

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は私に答えを与えます。

私の秋はどこですか?

答えて

3

まず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:PKタイプはNUMBERでない場合、この関数は失敗します。

Obs2:t_nameは大文字にする必要があります...

+0

そうですが、役に立たなかったです。しかし、ありがとう。 –

+0

私は、PKの「番号」タイプのDBを持っています。 –

+0

OK、SQLを修正しました。 –

関連する問題