2012-01-26 3 views
0

이 쿵푸 기능입니다 :오라클 기능 문제

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; 

, 오라클은 나에게 답변을 제공합니다.

누군가 내 말을 들려 줄 수 있습니까?

답변

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'; 

것을 제외 : PK 타입 NUMBER이 없을 때이 함수는 실패 할 것이다.

Obs2 : t_name은 대문자이어야합니다 ...

+0

맞았지 만 도움이되지 않았습니다. 하지만 고마워. –

+0

"number"유형의 PK가있는 DB가 있습니다. –

+0

오케이, SQL을 수정했습니다. –