请教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 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;