Oracle SQL interview

User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Rain_Man wrote:Там еще в вопросе по-моему было самых низких зарплат:


Ну да. И что самое интересное я помню печатала order by, но потом оно куда-т делось :wink:

Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

FatCat wrote:Я бы заменил на

Code: Select all

... and o.manid in (select id from emp where name='Tom');

Начальников Томов может быть больше одного.


Очень верное замечание :D

FatCat wrote:А вообще это не три, а одна таблица :)


То есть правильный ответ будет: "Мужик, слей все в одну таблицу и не морочь людям голову" :mrgreen: ?
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Oracle SQL interview

Post by Sabina »

lozzy wrote:5) ... ну устал я, народ может чего еще придумает. это же так просто ;)


Большое спасибо, это я на "десерт" оставлю :)
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Oracle SQL interview

Post by Sabina »

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 - то один и тот же :pain1:
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Oracle SQL interview

Post by Sabina »

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>




А тут на строку, которая у вас
and firstname=<whatever>
жалуется

*
ERROR at line 11:
ORA-00918: column ambiguously defined
SBolgov
Уже с Приветом
Posts: 14006
Joined: 17 Jun 2003 04:41

Re: Oracle SQL interview

Post by SBolgov »

Sabina wrote:А тут на строку, которая у вас
and firstname=<whatever>
жалуется

*
ERROR at line 11:
ORA-00918: column ambiguously defined

Ну да, потому что firstname есть и в a (people) и в b (подзапросе). Должно быть: a.firstname=<whatever>

А вообще - стилистически не очень хорошо одни и те же a и b везде использовать: и в главном запросе, и в подзапросе. Работать будет, но читать трудно.
Не гоните, и не гонимы будете...
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Oracle SQL interview

Post by Sabina »

Vick_NJ дайте хинт по вашей задачке. Ответьте пожалуйста на вопрос:

тут надо через rowid pseudo column делать?
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Oracle SQL interview

Post by Sabina »

SBolgov wrote:Должно быть: a.firstname=<whatever>


Didn't take care of the problem :( Та же ошибка
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Oracle SQL interview

Post by Sabina »

А вот еще проверьте ответы пожалуйста
--------------------------------------------------------------
Can you return cursor from PLSQL procedure to java?
--------------------------------------------------------------
Ref cursor is simply a resultset

So in Oracle

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;

In Java:

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));
              }
            }

----------------------------------------
What is the following java code doing?
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("jdbc/myDS");

----------------------------------------
First line instantiates InitialContext class. In the JNDI, all naming and directory operations are performed relative to a context. There are no absolute roots. Therefore the JNDI defines an InitialContext, which provides a starting point for naming and directory operations. Once you have an initial context, you can use it to look up other contexts and objects.

Next statement instantiates DataSource class and assigns it a value of a data source object resulted from InitialContext lookup from a resource reference.

To access a database directly from a J2EE application client, you retrieve a javax.sql.DataSource object from a resource reference configured in the client deployment descriptor. This resource reference is configured as part of the deployment descriptor for the client application, and provides a reference to a preconfigured data source object.
------------------------------------
Are there any pseudo-columns used in triggers?
--------------------------------------
Yes, for example the OLD, NEW, and PARENT pseudo-columns can be used only in row-level triggers

*****************
Особенно на последний вопрос...Что еще можно добавить?
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Re: Oracle SQL interview

Post by vc »

Sabina wrote:
SBolgov wrote:Должно быть: a.firstname=<whatever>


Didn't take care of the problem :( Та же ошибка


Sorry, I did not check the statement:

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



The result is sequenced for the firstname = 'bf'

VC
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Re: Oracle SQL interview

Post by vc »

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 - то один и тот же :pain1:


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


The same result as for the alternative SQL. -- ordered by "id".
???

VC
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Oracle SQL interview

Post by Sabina »

и правда все работает. спасибо за подсказку Vick_NJ не говорите :wink:
Last edited by Sabina on 04 Aug 2004 22:21, edited 2 times in total.
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Re: Oracle SQL interview

Post by vc »

SBolgov wrote:А вообще - стилистически не очень хорошо одни и те же a и b везде использовать: и в главном запросе, и в подзапросе. Работать будет, но читать трудно.


I agree ;)

VC
NN13
Новичок
Posts: 53
Joined: 06 Apr 2004 20:09

Re: Oracle SQL interview

Post by NN13 »

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 для второй и т.д..


SELECT
(SELECT count(id) FROM people t1
WHERE t1.id<= t2.id and t1.firstname="Sabina"
) AS sid, firstname , lastname, id
FROM people t2
WHERE
firstname="Sabina"
ORDER BY sid
Бродяга
Уже с Приветом
Posts: 16086
Joined: 22 Apr 2003 17:57
Location: Колыбель

Post by Бродяга »

Sabina, у Вас солидные знания в PL/SQL. Честно говоря у меня на работе нет ни одного программера, включая интерпрайз архитектора которые процедуры писать умеют:-)
Бог создал людей разными, Линкольн дал людям свободу, а Кольт всех уравнял.

Return to “Вопросы и новости IT”