【发布时间】:2015-04-17 09:54:42
【问题描述】:
这是一个 pl/sql 的家庭作业练习。我必须对表中每一行中的值进行排序,其列应从 user_tab_columns 中检索。 我是 pl/sql 的初学者。我用不同的方法尝试了好几个小时,但没有正确解决。
下面的代码可能看起来很愚蠢,但是请你帮帮我吗?
CREATE TABLE notat(Id Number, Col1 Number, Col2 Number, Col3 Number, Col4 Number, Col5 Number, Col6 Number, Col7 Number);
INSERT INTO notat VALUES(1,6,3,8,4,7,8,4);
INSERT INTO notat VALUES(2,5,7,9,2,1,7,8);
INSERT INTO notat VALUES(3,2,7,4,8,1,5,9);
INSERT INTO notat VALUES(4,8,4,7,9,4,1,4);
INSERT INTO notat VALUES(5,7,5,2,5,2,6,4);
create or replace procedure sp1_fy_marks is
v_colname varchar2(10);
v2_colname varchar2(10);
tmp number;
tmp2 number;
begin
for row in (select * from notat)
loop
for x in (select column_name
from user_tab_columns
where table_name = 'NOTAT')
loop
v_colname := x.column_name;
execute immediate 'Select ' || v_colname || ' from NOTAT where Id=' || row.Id into tmp;
for y in (select column_name
from user_tab_columns
where table_name = 'NOTAT')
loop
v2_colname := y.column_name;
execute immediate 'Select ' || v2_colname || ' from NOTAT where Id=' || row.Id into tmp2;
if tmp > tmp2 then
execute immediate 'UPDATE NOTAT SET ' || v_colname || '=' || tmp2 || ' WHERE Id=' || row.Id;
execute immediate 'UPDATE NOTAT SET ' || v2_colname || '=' || tmp || ' WHERE Id=' || row.Id;
end if;
end loop;
end loop;
end loop;
end sp1_fy_marks;
execute sp1_fy_marks;
【问题讨论】:
-
能否请我解释清楚...没有得到你真正想做的事情
-
我正在尝试对位于同一行的不同列中的值进行排序。
-
如果你问我,这是一件非常愚蠢的事情。你确定这就是练习的真正目的吗?
-
我很确定,但我知道这听起来很傻......
标签: sql database oracle plsql database-administration