Rain_Man wrote:Там еще в вопросе по-моему было самых низких зарплат:
Ну да. И что самое интересное я помню печатала order by, но потом оно куда-т делось
![Wink :wink:](./images/smilies/icon_wink.gif)
Сабина
FatCat wrote:Я бы заменил наCode: Select all
... and o.manid in (select id from emp where name='Tom');
Начальников Томов может быть больше одного.
FatCat wrote:А вообще это не три, а одна таблица
lozzy wrote:5) ... ну устал я, народ может чего еще придумает. это же так просто
vc wrote:select
(select count(*) from people where a.id>=id and a.firstname=firstname) seqnumber,
firstname,
secondname
from people a where firstname=<whatever>
[/code]
vc wrote:Code: Select all
select seqnumber,
fistname,
secondname
from people a,
(select a.id, a.fistname, count(*) seqnumber
from people a, people b
where a.id>=b.id
and a.firstname=b.firstname
group by a.id, a.fistname) b
where a.id=b.id
and firstname=<whatever>
Sabina wrote:А тут на строку, которая у вас
and firstname=<whatever>
жалуется
*
ERROR at line 11:
ORA-00918: column ambiguously defined
SBolgov wrote:Должно быть: a.firstname=<whatever>
Code: Select all
CREATE OR REPLACE PACKAGE pack_brm AS
TYPE subjid_curtyp IS REF CURSOR;
PROCEDURE proc_random (p_rand_num IN VARCHAR2,
p_db_loc IN VARCHAR2,
p_protocol IN VARCHAR2,
p_subjid_rec OUT subjid_curtyp,
p_message OUT VARCHAR2);
END;
CREATE OR REPLACE PACKAGE BODY pack_brm AS
PROCEDURE proc_random (p_rand_num IN VARCHAR2,
p_db_loc IN VARCHAR2,
p_protocol IN VARCHAR2,
p_subjid_rec OUT subjid_curtyp,
p_message OUT VARCHAR2) AS
BEGIN
SELECT 'USER' INTO p_message FROM dual;
OPEN p_subjid_rec FOR
SELECT USER FROM dual;
END;
END;
Code: Select all
cst = conn.prepareCall("{ call pack_brm.proc_random(?,?,?,?,?) }") ;
cst.setString(1, "tmp");
cst.setString(2, "tmp");
cst.setString(3, "tmp");
cst.registerOutParameter(4, OracleTypes.CURSOR);
cst.registerOutParameter(5, Types.VARCHAR);
cst.execute() ;
if (cst.getString(5).equals("USER")) {
rs = (ResultSet) cst.getObject(4);
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
Sabina wrote:SBolgov wrote:Должно быть: a.firstname=<whatever>
Didn't take care of the problemТа же ошибка
Code: Select all
-- data
select * from people
ID FIRSTNAME SECONDNAME
1 af al
2 af al
3 af al
4 bf bl
5 bf bl
--SQL
select seqnumber, a.id,
a.firstname,
secondname
from people a,
(select a.id, a.firstname, count(*) seqnumber
from people a, people b
where a.id>=b.id
and a.firstname=b.firstname
group by a.id, a.firstname) b
where a.id=b.id
and a.firstname='bf'
-- result
SEQNUMBER ID FIRSTNAME SECONDNAME
1 4 bf bl
2 5 bf bl
Sabina wrote:vc wrote:select
(select count(*) from people where a.id>=id and a.firstname=firstname) seqnumber,
firstname,
secondname
from people a where firstname=<whatever>
[/code]
Так я тоже пыталась. Ваш вариант неверен. seqnumber - то один и тот же
Code: Select all
select
(select count(*) from people where a.id>=id and a.firstname=firstname) seqnumber, id,
firstname,
secondname
from people a where firstname='af'
SEQNUMBER ID FIRSTNAME SECONDNAME
1 4 bf bl
2 5 bf bl
SBolgov wrote:А вообще - стилистически не очень хорошо одни и те же a и b везде использовать: и в главном запросе, и в подзапросе. Работать будет, но читать трудно.
Vik_NJ wrote:Sabina wrote:
А что тут еще можно сказать, кроме того, что это ограничение использования BEFORE UPDATE триггера, когда одна и та же таблица изменяется DML action и на ней же trigger is fired. И нужно использовать way around, типа использовать два триггера вместо одного, с referencing to package variables и пр. ?
Мне вообще-то надо именно заковыристые select-ы, руку набить хоть немного.
Sabina, да Вы всё и так знаете! :D
Вот Вам задачка,
дана таблица
people ( id int,
firstname varchar2(30),
lastname varchar2(30),
...
)
Вам нужно не используя rownum вывести пронумерованный список (seqnumber, firstname, lastname, id) всех, у кого first name = "Sabina" :D seqnumber должен = 1 для первой записи, 2 для второй и т.д..