读书人

请问SQL:返回某表的主键列及此列的最

发布时间: 2012-05-27 05:42:30 作者: rapoo

请教SQL:返回某表的主键列及此列的最大值,以数据集返回。
请教SQL:返回某表的主键列及此列的最大值,以数据集返回,考虑表是任意的,有可能有多列主键。
我写了以下,实现了一半功能,查出表的主键列:

SQL code
SELECT T1.COLUMN_NAME FROM SYS.USER_CONS_COLUMNS T1            INNER JOIN SYS.USER_CONSTRAINTS T2 ON T1.TABLE_NAME=T2.TABLE_NAME AND T1.CONSTRAINT_NAME=T2.CONSTRAINT_NAME            WHERE T1.TABLE_NAME=某表变量 AND T2.CONSTRAINT_TYPE='P'



怎样再加上此列最大值 的列?

谢谢朋友们帮忙!节日快乐!!

[解决办法]
多列主键时,怎么样判断哪一列为最大?
[解决办法]
多列为主键时,需要判断主键最大值的规则。
再有这里需要在PL/SQL中执行动态SQL了,因为在SQL语句执行时,我们并不能确定主键列的名称。
[解决办法]
这是个误区,并不是用一个Sql语句实现就是最好的. 希望你能早点看破红尘,嘿嘿
[解决办法]
的确,清晰的逻辑是最重要的。
探讨

这是个误区,并不是用一个Sql语句实现就是最好的. 希望你能早点看破红尘,嘿嘿

[解决办法]
SQL code
create or replace procedure Max_P_Key_Column(str_TABLE_NAME in varchar2) is    Str_Sql varchar2(200) := null;    cursor Cur_COLUMN is        select T1.COLUMN_NAME          from SYS.USER_CONS_COLUMNS T1         inner join SYS.USER_CONSTRAINTS T2            on T1.TABLE_NAME = T2.TABLE_NAME           and T1.CONSTRAINT_NAME = T2.CONSTRAINT_NAME         where T1.TABLE_NAME = upper(str_TABLE_NAME)           and T2.CONSTRAINT_TYPE = 'P';    Row_COLUMN_NAME Cur_COLUMN%rowtype;begin    Str_Sql := 'select ';    for Row_COLUMN_NAME in Cur_COLUMN    loop        Str_Sql := Str_Sql || 'Max(' || Row_COLUMN_NAME.Column_Name || '),';    end loop;    Str_Sql := substrb(Str_Sql, 1, length(Str_Sql) - 1);    Str_Sql := Str_Sql || ' from ' || str_TABLE_NAME;    dbms_output.put_line(Str_Sql);    execute immediate Str_Sql;exception    when others then        dbms_output.put_line('Error');end Max_P_Key_Column;
[解决办法]
SQL code
declare  sSql varchar2(2000);  tmpsql varchar2(2000);  cursor c1 is     select a.column_name  from user_cons_columns a,user_constraints b    where  a.constraint_name=b.constraint_name and a.table_name=b.table_name    and b.constraint_type='P' and a.table_name='SMART_DEAL_201108_G';begin  sSql := 'select ';  for c2 in c1 loop    tmpsql := tmpsql||',Max('||c2.Column_name||')';  end loop;  tmpSql := substr(tmpsql,2,length(tmpsql));  sSql := sSql||tmpsql||' from SMART_DEAL_201108_G ';  begin    execute immediate sSql;    dbms_output.put_line(sSql);   exception    when others then      dbms_output.put_line('Error');   end; end; 

读书人网 >oracle

热点推荐