Query SQL involving several tables

I have a scenario in SQL where, for each position there are associated tags. A user is the one who makes the post and that he belongs to a given location. The location corresponds to a given country.

I create tables such as
CREATE TABLE post_table 
(
post_id VARCHAR(20), 
user_id VARCHAR(20),
PRIMARY KEY(post_id)
);

CREATE TABLE tags_table
(
   post_id VARCHAR(20),
   tags VARCHAR(20),
   PRIMARY KEY(tags, post_id),
   FOREIGN KEY(post_id) REFERENCES post_table(post_id) ON DELETE CASCADE
);


CREATE TABLE location
(
location_id VARCHAR(20), 
country VARCHAR(20),
PRIMARY KEY (location_id)
);

CREATE TABLE user_info
(
user_id VARCHAR(20), 
location_id VARCHAR(30), 
PRIMARY KEY (user_id),
FOREIGN KEY(location_id) REFERENCES location(location_id) ON DELETE CASCADE
);
Now, I insert values into these tables as
INSERT INTO post_table VALUES( 'p1', 'u1' );
INSERT INTO post_table VALUES( 'p2', 'u1' );
INSERT INTO post_table VALUES( 'p3', 'u2' );
INSERT INTO post_table VALUES( 'p4', 'u3' );
INSERT INTO post_table VALUES( 'p5', 'u2' );

INSERT INTO tags_table VALUES( 'p1', 'US Open' );
INSERT INTO tags_table VALUES( 'p1', 'Real good' );
INSERT INTO tags_table VALUES( 'p1', 'Madrid' );
INSERT INTO tags_table VALUES( 'p2', 'Madrid' );
INSERT INTO tags_table VALUES( 'p3', 'Rossoneri' );
INSERT INTO tags_table VALUES( 'p4', 'Milan' );
INSERT INTO tags_table VALUES( 'p4', 'Los Angeles' );
INSERT INTO tags_table VALUES( 'p5', 'Rossoneri' );

INSERT INTO location VALUES( 'loc1', 'Spain');
INSERT INTO location VALUES( 'loc2', 'England');

INSERT INTO user_info VALUES( 'u1', 'loc1' );
INSERT INTO user_info VALUES( 'u2', 'loc2' );
INSERT INTO user_info VALUES( 'u3', 'loc1' );
Now I have to query for each country, show them more SUV tag (s)

So, for these data, the result should be like
Country              MostTags
Spain                Madrid
England              Rossoneri
Please help me to write this query guys.

Hello

Something like that

select      country
     , tags from
           (
             select      l.country
               , t.tags
               , dense_rank() over (     partition by l.country
                              order by count(*) desc) drn
          from      location l
               , user_info u
               , post_table p
               , tags_table t
          where      l.location_id = u.location_id
               and p.user_id=u.user_id
               and p.post_id=t.post_id
          group by l.country
               , t.tags
     )
where drn <=1   -- rank depends on like 1,2 or 3 popular tags for each country

Concerning
Anurag

Tags: Database

Similar Questions

  • Query SQL with multiple tables - what is the most effective way?

    Hello I learn PL/SQL. I have a simple procedure, where I need to find the number of employees and departments by location according to location_id user input.

    I have 3 Tables:

    LOCATIONS
    Location_id (pk)
    location_name
    ...
    DEPARTMENTS
    department_id (pk)
    Location_id (fk)
    department_name
    ....
    EMPLOYEES
    employee_id (pk)
    department_id (fk)
    Employee_Name
    ....

    1 location can have 0 - SEVERAL departments
    1 employee has 1 Department

    Here's the query I come up with for PL/SQL procedure:

    / * Ecount, Dcount are variable NUMBERS * /.

    SELECT SUM (EmployeeCount), COUNT (DepartmentNumber)
    IN Ecount, Dcount
    Of
    (SELECT COUNT (employee_id) EmployeeCount, department_id DepartmentNumber
    Employees
    GROUP BY department_id
    HAVING department_id IN
    (SELECT department_id
    Ministries
    WHERE location_id = userInput));

    I get the correct result, but I wonder if my query is on the right track and if there is a more "efficient" method to do so.
    Thanks in advance for help a beginner.

    Hello

    Welcome to the forum!

    Something like this will be more effective:

    SELECT    COUNT (employee_id)               AS ECount
    ,       COUNT (DISTINCT department_id)     AS DCount
    FROM       employees
    WHERE       department_id IN (     SELECT     department_id
                        FROM      departments
                        WHERE      location_id = :userInput
                      )
    ;
    

    You should also try a join instead of the IN subquery.

    For efficiency, do only the things you need to do.
    For example, you need not a number of employees in each Department, in order to not calculate one. This means that you will not need the notice online, so do not have.
    You needn't PL/SQL for this work, so don't use PL/SQL, if you do not have to (I know this question was out of context, then you may have good reasons to do this in PL/SQL.)

    Perform all the filtering as soon as possible. Do not waste it effort on the things that will not be used.
    An example of this is: never use a HAVING clause when you can use a WHERE clause. What is the difference between a WHERE clause and a HAVING clause? The WHERE clause is applied until the aggregate functions are calculated and the HAVING clause is applied after; There is no other difference. Therefore, if the HAVING clause is not reference an aggregate function, it could be done in a WHERE clause instead.

  • outer join when there are several tables are involved

    Could not put up the question correctly to the last channel, my problem is with the join when there are several tables are involved, this is just one example of the task that I have to carry.

    Tab1 aura model id retailer_id information for all the weeks (from the first Monday) of the month of JUNE with cost and Helen

    Tab1

    model_id

    retailer_id

    sell_date

    cost

    Helene

    1

    12

    June 3, 13

    100

    40

    1

    12

    June 10, 13

    200

    20

    1

    12

    17 June 13

    300

    20

    1

    12

    24 June 13

    400

    20

    2

    12

    June 3, 13

    300

    10

    2

    12

    June 10, 13

    200

    20

    2

    12

    17 June 13

    300

    20

    2

    12

    24 June 13

    400

    20

    Tab2:

    each retailer belongs to a dealer, under the table has the same information

    retailer_id

    Dealer_id

    12

    100

    13

    100

    14

    101

    15

    101

    16

    101

    Tab 3

    There is a third layer where each dealership is having a garage band

    Dealer_id

    Dealer_group

    100

    1001

    101

    1001

    102

    2001

    103

    2001

    104

    3001

    105

    3001

    Tab4:

    Of this table for each model and dealer discount information for the month of June (every week)

    model_id

    Dealer_group

    discount_date

    discount

    1

    1001

    June 3, 13

    10

    1

    1001

    June 10, 13

    20

    1

    1001

    17 June 13

    10

    1

    1001

    24 June 13

    30

    2

    1001

    June 3, 13

    10

    2

    1001

    June 10, 13

    20

    2

    1001

    17 June 13

    10

    2

    1001

    24 June 13

    30

    3

    2001

    June 3, 13

    10

    3

    2001

    June 10, 13

    20

    3

    2001

    17 June 13

    10

    3

    2001

    24 June 13

    30

    Master_info:

    It's the main table which is the master table for model /retailer information

    Model_id

    retailer_id

    1

    12

    2

    12

    3

    12

    4

    12

    1

    13

    2

    13

    Output

    model_id

    retailer_id

    sell_date

    cost

    Helene

    Final (cost-helene-discount)

    1

    12

    June 3, 13

    100

    40

    50

    1

    12

    June 10, 13

    200

    20

    160

    1

    12

    17 June 13

    300

    20

    270

    1

    12

    24 June 13

    400

    20

    350

    2

    12

    June 3, 13

    300

    10

    280

    2

    12

    June 10, 13

    200

    20

    160

    2

    12

    17 June 13

    300

    20

    270

    2

    12

    24 June 13

    400

    20

    350

    3

    12

    June 3, 13

    0

    0

    0

    3

    12

    June 10, 13

    0

    0

    0

    3

    12

    17 June 13

    0

    0

    0

    3

    12

    24 June 13

    0

    0

    0

    4

    12

    June 3, 13

    0

    0

    0

    4

    12

    June 10, 13

    0

    0

    0

    4

    12

    17 June 13

    0

    0

    0

    4

    12

    24 June 13

    0

    0

    0

    1

    13

    June 3, 13

    0

    0

    0

    1

    13

    June 10, 13

    0

    0

    0

    1

    13

    17 June 13

    0

    0

    0

    1

    13

    24 June 13

    0

    0

    0

    2

    13

    June 3, 13

    0

    0

    0

    2

    13

    June 10, 13

    0

    0

    0

    2

    13

    17 June 13

    0

    0

    0

    1

    13

    24 June 13

    0

    0

    0

    For highted above records (model_id / retailer_id combination) there is no record in tab1 but they have entered in master_info then the recordings should come for all model_id/retailer_id with all the 0 values

    Hello

    Thanks for posting the sample data.

    It is unclear what dates you want to include in the output.  The following query shows how you can generate every Monday in a given range.  If you only want to include the dates that are actually present in tabl1 and/or tab4, you can simplify this a bit.

    WITH date_range AS

    (

    SELECT TRUNC (TO_DATE (' 3 June 2013', 'DD-Mon-YYYY'))

    , 'IW '.

    ) AS first_monday

    , TRUNC (TO_DATE (24 June 2013 ', 'DD-Mon-YYYY') + 6)

    , 'IW '.

    ) AS last_monday

    OF the double

    )

    all_mondays AS

    (

    First_monday SELECT + (7 * (LEVEL - 1)) AS sell_date

    OF date_range

    CONNECT BY LEVEL<= 1="" +="" (="" (last_monday="" -="">

    / 7

    )

    )

    SELECT mi.model_id

    mi.retailer_id

    am.sell_date

    , Cost of NVL (t1.cost, 0) AS

    , NVL (t1.rebat, 0) IN the refund

    , NVL (t1.cost, 0)

    -(NVL (t1.rebat, 0))

    + NVL (t4.discount, 0)

    ) AS final

    E master_info

    CROSS JOIN all_mondays am

    LEFT OUTER JOIN tab1 t1 ON t1.model_id = mi.model_id

    AND t1.retailer_id = mi.retailer_id

    AND t1.sell_date = am.sell_date

    LEFT OUTER JOIN tab2 t2 ON t2.retailer_id = mi.retailer_id

    LEFT OUTER JOIN tab 3 t3 ON t3.dealer_id = t2.dealer_id

    LEFT OUTER JOIN tab4 t4 ON t4.model_id = t1.model_id

    AND t4.dealer_group = t3.dealer_group

    AND t4.discount_date = t1.sell_date

    ORDER BY mi.retailer_id

    mi.model_id

    am.sell_date

    ;

    The results are not exactly what said you you wanted.  I suspect it's because of typos in that you posted.

  • error in the table of boat or view does not exist, but on query sql prompt works

    Hello
    Can someone help me understand the error ORA-00942: table or view does not exist when compiling the package on Oracle 9.2.0.4.0

    The below package compiled in the use of the system and trying some queries against the view v$ session_wait however getting error below.

    PACKAGE OF THE BODY SYSTEM. PK_DB_ALERT
    Online: 212
    PL/SQL: ORA-00942: table or view does not exist

    I can run the same query mentioned below sql prompt the user of the system, and it works very well however he dislikes package, please advice, thank you in advance.


    SELECT SID, seq #, event, wait_time
    V $ session_wait
    WHERE event NOT LIKE ' SQL * Net %' AND wait_time <>0
    ORDER BY 2

    DDD says:
    Hello
    Can someone help me understand the error ORA-00942: table or view does not exist when compiling the package on Oracle 9.2.0.4.0

    That means package owner is granted select view not directly, but through roles. However, the roles are ignored by stored rights define or packages stored procedures or functions/triggers... You must grant select owner directly the view package.

    SY.

    Published by: Solomon Yakobson, January 21, 2010 04:06

  • Need for the sql query to have several columns in a single coulumn

    Hi all

    I need create the query to have several columns in a single column with several lines.

    Select a.customer_trx_id, a.previous_customer_trx_id
    of ra_customer_trx_all one
    where a.customer_trx_id =: customer_trx_id

    Here, a.customer_trx_id and a.previous_customer_trx_id are in two columns. I need to put them in a single column.

    Say: the foregoing is output
    --------------------------------------------------------------------------------
    a.customer_trx_id a.previous_customer_trx_id

    --------------------------------------------------------------------------------
    123456 87654

    --------------------------------------------------------------------------------

    Need for a single column

    As


    --------------------------------------------------------------------------------
    123456
    87654

    --------------------------------------------------------------------------------

    Please do the needful. Please note that it is not the UNION.

    Thank you
    Abdul

    Hello

    You want a way to confirm that what looks like two rows is really a line?

    Here are three ways:

    (1) count the lines:

    WITH  my_original_querry     AS
    (
         select  a.customer_trx_id || CHR(13)
                          || a.previous_customer_trx_id     as id
         from      ra_customer_trx_all     a
         where      a.customer_trx_id      = 274881
    )
    SELECT     COUNT (*)
    FROM     my_original_query;
    

    (2) in SQL * Plus, have SQL * more count them for you:

    SET     FEEDBACK     1
    
    select  a.customer_trx_id || CHR(13)
                     || a.previous_customer_trx_id     as id
    from      ra_customer_trx_all     a
    where      a.customer_trx_id      = 274881;
    

    (3) implicitly count them with the ROWNUM Pseudo-column

    select  a.customer_trx_id || CHR(13)
                     || a.previous_customer_trx_id     as id
    ,     ROWNUM
    from      ra_customer_trx_all     a
    where      a.customer_trx_id      = 274881;
    
  • Join several Tables versioned

    Hello

    We are working on a data warehousing project and wonder how do to join several tables that each are versioned separately (type SCD 2 with a valid and valid to date).

    Because for example, we get our client from a single source of information (id customer, name, etc.) and the information on the rate of customer from another source.  The sources are different, we have the separate tables for them and each of them gets versioned independently.

    Here's my customer table (with its own valid and valuable to the columns).

    IDName of the customerValid fromValid until the
    1CitiBank1 JANUARY 14JANUARY 1, 15
    1New CitiBank2 JANUARY 15FEBRUARY 1, 15
    1Latest CitiBank2 FEBRUARY 15APRIL 1, 15

    And similarly the Client side ID and rating information.

    IDNoteValid fromValid until the
    1Platinum1 JANUARY 14FEBRUARY 1, 14
    1PremiumFEBRUARY 1, 141ST MARCH 15

    I want to merge the two tables above and present information at a glance.  I have some difficulty to determine validates the valid columns.

    IDName of the customerNoteValid from (Calculated)Valid until the (calculated)
    1CitiBankPlatinum1 JANUARY 14FEBRUARY 1, 14
    1CitiBankPremiumFEBRUARY 1, 14JANUARY 1, 15
    1New CitiBankPremium2 JANUARY 15FEBRUARY 1, 15
    1Latest CitiBankPremium2 FEBRUARY 151ST MARCH 15

    And it's the query I used to get the above result:

    SELECT client. id ,

           customer . name ,

           CRM . level ,

           Greatest (client. vld_fm , crm. vld_fm ),

           Least (client. vld_to , crm. vld_to )

    DE    client client,

           client_rating crm

      client. id = crm. id

           AND ( client. vld_fm <= crm. vld_fm

                 AND client. vld_fm <= crm. vld_to

                 AND client. vld_fm >= crm. vld_fm

                 AND client. vld_fm >= crm. vld_to )

            OR ( client. vld_fm BETWEEN crm. vld_fm AND crm. vld_to )

            OR ( client. vld_to BETWEEN crm. vld_fm AND crm. vld_to );



    The problem is we have several data sources (and each with its own versions) and joins become so very very complex.  Is there a better way to write the query?

    Or maybe a better way to design our tables?

    Thanks for your help.

    Anand

    Hello

    you only need ranges that overlap to join.

    Re: How do to sql query in a loop

    Is a simpler way to test if the x_start to x_stop range comes into conflict with the range of y_start to y_stop

    WHERE     x_start <= y_stop AND     y_start <= x_stop
    

    In other words, two overlapping if and only if everyone will start before the other ends one. If this is not obvious (and it was certainly not clear to me when I heard it), then look at it this way: two ranges are not overlapping if and only if one of them starts after the end of the other.

    Concerning

    Marcus

  • Performance in the treatment of the based on a game, several tables from target

    Welcome.

    I have question about a treatment based on a game, when mapping have several tables in the target. I noticed that OWB generate SQL code that usually build a query for each table in the target insertion. Suggest that each table has results from different stages of the treatment, so multi table insert cannot be used. Looking for generated code PL/SQL, I feel that each insert query managed independently and so each make analyses of source table and joins on its own.
    To make my question more concrete, I will introduce two simple examples of stream ETL:
    1) start-> (table scan)--> (joins)--> (inserting into the table t1)
    2) start-> (table scan)--> (joins)-> two targets: (insert into table t1)
    -> two targets: (deduplicator)--> (insertion in table t2)
    Admit, that scans and joins are very expensive comparing to insert rows. Thus, it is usually, if oracle performs scans of tables 2 and joined in example 2) and example 2) take twice longer than example 1)?
    Or fact Oracle is so smart that it can cache the result of entering the first query and use it again in the second query?

    Best regards
    Pawel

    Hi Pawel,

    Thus, it is usually, if oracle performs scans of tables 2 and joined in example 2) and example 2) take twice longer than example 1)?

    Yes, you are right

    Or fact Oracle is so smart that it can cache the result of entering the first query and use it again in the second query?

    Nor the database Oracle or OWB don't is not to intermediate capabilities query result caching.
    While the Oracle database feature "result cache queries", but it must match exactly to SQL source and it store only the final query result...

    Kind regards
    Oleg

  • Add several tables on a Page

    Hello

    I am building an application that handles (APEX 4.0) material inventory. I have an entry page that adds data to two or more tables at once. The page has two forms on it pointing to two separate tables. However when I try to run the page, it fails and returns an error:

    ORA-06550: line 1, column 437: PL/SQL: ORA-00904: "ORH_LAST_UPDATE_DATE": invalid identifier ORA-06550: line 1, column 7: PL/SQL: statement ignored
    Error failed to process row in the IDD_ID_DATA table.

    As far as I can see in the application, this column is not in question (I don't even do anything for her and she is nullable). I looked at the application itself as well as some research online but can't find anything useful...


    So my question is this: is it possible to add several tables to a page? If yes how?

    I'm new to APEX so any help would be greatly appreciated!

    UPDATE:

    I received an email from support of APEX team:

    «The answer is simple, it's you will need manually code processes query (and DML) If you want to maintain multiple tables on a page (there is a limit of a table when you use the integrated process).»
    For this I suggest that you remove the process generated by the wizards and create processes of PL/SQL with insert, update, delete statements as needed. "This encoding is not difficult but takes much longer when you can use the integrated process.

    I've been playing with code PL/SQL and the final result is the following:

    Start
    INSERT INTO table1
    VALUES)
    : P2_Item_Field1,.
    (: P2_Item_Field2);
              
    INSERT INTO table2
    VALUES)
    : P2_Item_Field1,.
    (: P2_Item_Field2);
    end;

    I used this code in a PL/SQL custom in the treatment process > section to the Page processing and it seems to work fine now. The only downside to this method is that if the name of a Page element is changed the code will also have to be changed. Except that I had no problem.

  • create the view of several tables of days

    Hello
    I'll have existing oracle db with the daily stat data, tables strangely named data_mon, data_tue, data_wed... For my batch that I intend to use the view with multiple day data, let say for the last 5 days.
    Do not know how better to implement my sql with these suffixes _mon statement to make it more or less dynamic.
    I create also ever seen from several tables, then, probably, that I can do something that will add daily updated data and remove data from 5 days?

    You will appreciate comments on the details and the whole concept. I have prev sql server experience.

    Thank you
    T

    user12943718 wrote:
    Hello
    I'll have existing oracle db with the daily stat data, tables strangely named data_mon, data_tue, data_wed... For my batch that I intend to use the view with multiple day data, let say for the last 5 days.
    Do not know how better to implement my sql with these suffixes _mon statement to make it more or less dynamic.
    I create also ever seen from several tables, then, probably, that I can do something that will add daily updated data and remove data from 5 days?

    You will appreciate comments on the details and the whole concept. I have prev sql server experience.

    Thank you
    T

    Change the data model if you have 1 table for a day.

    You have just a DATA table and a column to indicate the day of the application.

    Then you don't need a view, do not need anything dynamic, do not need to break your head against a wall for a simple query... etc.

  • Loading data from SQL to Essbase table

    Hello

    I'm loading data from SQL to Essbase table by using a rules file. Number of rows in the source table is 7 million. I use the SUNOPSIS MEMORY ENGINE as area transit, LKM SQL for SQL and SQL IKM for Hyperion Essbase (DATA).

    Question:

    1 can I not use any other LKM as MSSQL for MSSQL (PCBS) to load data to the staging instead of LKM SQL for SQL? What I have to change the transit area then? Loading data using LKM SQL for SQL seems quite slow.

    2 it is mandatory to use LKM SQL for SQL, can someone please tell me what I can change to make this quick support parameters?

    3. is it compulsory to use the SUNOPSIS MEMORY engine loading data from SQL server to Essbase?

    Thank you...

    (1) Yes, I highly recommend watching using a KM which uses native as database technology these will usually be more efficient than the generic (like LKM SQL for SQL) KM especially when large volumes of data are involved. Your staging will change depends on where you organize data for example if you are using a SQL server specific KM as - MSSQL for MSSQL (PCBS) - you must have a lay-by available on a MSSQL database and have access to the utility of PCBS.

    (2) it is not mandatory to use this KM you can use a KMs supported by your database technology

    (3) it is absolutely not obligatory to use the SUNOPSIS MEMORY engine. This should only be used when you have relatively small amounts of data, as well as all the processes in memory, or in the case where you have no other relational technology to perform the staging on. However, in your case to use wherever you are processesing these large volumes of data you should be staged on a physical such as SQL Server or Oracle database if they are available.

  • Error (301,28): PL/SQL: ORA-00942: table or view does not exist

    Hi all

    11.2.0.3.10

    AIX6

    I was installing store_procedures on our PROD several times, and they are successful. This stored_procedures are created by developers and once tested on DEV & UAT, they are transferred to the PROD through me.

    But this time I install a new SP, but I got error > Error (301,28): PL/SQL: ORA-00942: table or view does not exist

    Even if the synonym. The owner of the schema of the SP has grant select on the table and synonym of created. Why not MS can see this synonym?

    Is there something that I missed?

    Help, please... I'm going crazy

    Thank you all,

    MK

    Since there is only one user in your role, so I'll suggest to directly grant you the user rather than role - it's the easiest and simplest account according to your needs. The roles are best used to organize all of the users. If ever it is necessary to use roles (i.e. multiple users/schemas in a role) then, I think, you can play with AUTHID clause creating blocks.

  • Create a simple query (SQL)

    Hi experts,

    I have a table with data as follows:

    Database version: 10.2.0.4
    Table name: TRANSACTION_HIST_TAB
    TRANS_ID      LOT_NO    PART_NO    QTY    TRANSACTION         LOCATION_NO    ROWVERSION
    ---------     -------   --------   ----   -----------------   ------------   ----------------------
    T00000X1      L001     ABC         10     CHANGE LOCATION     WRH_1          01/01/13 08:00:00 AM
    T00000X2      L001     ABC        10     CHANGE LOCATION     WRH_2          01/02/13 10:00:00 AM
    T00000X3      L002     XYZ        20     CHANGE LOCATION     WRH_3          01/03/13 11:00:00 AM
    and I want to create a single query (SQL) which can get data grouped by LOT_NO and only the first transaction by LOT_NO

    Expected results:
    TRANS_ID      LOT_NO    PART_NO    QTY    TRANSACTION         LOCATION_NO    ROWVERSION
    ---------     -------   --------   ----   -----------------   ------------   ----------------------
    T00000X1      L001     ABC         10     CHANGE LOCATION     WRH_1          01/01/13 08:00:00 AM
    T00000X3      L002     XYZ        20     CHANGE LOCATION     WRH_3          01/03/13 11:00:00 AM
    Someone has an idea?

    Kind regards

    Rob

    Hi, Rob.

    Here's one way:

    WITH     got_r_num     AS
    (
         SELECT     t.*     -- or list columns you want
         ,     ROW_NUMBER () OVER ( PARTITION BY  lot_no
                                   ORDER BY          rowversion
                           )  AS r_num
         FROM    transaction_hist_tab  t
    )
    SELECT       *     -- or list all columns except r_num
    FROM       got_r_num
    WHERE       r_num     = 1
    ;
    

    Depending on your data and your needs, match Sub like Manik suggested, might work. I think that you want to GROUP BY lot_no only, no transid.

    I hope that answers your question.
    If not, post a small example data (CREATE TABLE and only relevant columns, INSERT statements), and the results you want from this data.
    Explain, using specific examples, how you get these results from these data.
    Always say what version of Oracle you are using (for example, 11.2.0.2.0).
    See the FAQ forum {message identifier: = 9360002}

  • query sql delicate... date of the created object.

    friends...
    I am trying to solve this query sql delicate for some time, but unable to progress when it comes to this day...

    Q.
    Query dba_objects and list all tables created yesterday ' sysdate - 1' and in another column of the list all the tables created ' sysdate - 7'.

    -query below gives me to yesterday, but don't know how to have 'Last_week' column filled... maybe I join?
    select owner, object_name, to_char(created, 'MM-DD-YYYY HH24:MI:SS') "Yesterday", to_char(created, 'MM-DD-YYYY HH24:MI:SS') "Last_Week"
    from dba_objects
    where object_type = 'TABLE'
    and created >=trunc(sysdate - 1)
    and created < trunc(sysdate)
    appreciate your time and effort in looking at this...

    Thank you

    Published by: khallas301 on March 19, 2013 09:27
    typo edited... Thanks to frank

    khallas301 wrote:
    Query dba_objects and list all tables created yesterday ' sysdate - 1' and in another column of the list all the tables created ' sysdate - 7'.

    Well, sysdate - 7 ways months ago, not last week. If this is what you want, then:

    select  owner,
            object_name,
            case
              when trunc(created) = trunc(sysdate - 1) then to_char(created,'MM-DD-YYYY HH24:MI:SS')
            end "Yesterday",
            case
              when trunc(created) = trunc(sysdate - 7) then to_char(created, 'MM-DD-YYYY HH24:MI:SS')
            end "Week Ago"
      from  dba_objects
      where object_type = 'TABLE'
        and (
                trunc(created) = trunc(sysdate - 1)
             or
                trunc(created) = trunc(sysdate - 7)
            )
    /
    

    SY.

  • Trigger on a several tables

    IHAVE a requirement like this.but explained in the form of two table emp and Dept.

    I have a table emp table(empno,ename,deptno) and dept (deptno, dname)
    I have a third emp_details (empno, ename, deptno, dname) of table

    I have a procedure that returns the empdetails
    I have a query in th eabove procedure, select * from emp_details; that returns all the details.

    I want to write a trigger of such that,.
    If I insert or update a row in the emp and dept table and then he should get inserted/updated in the table of emp_details also.
    I am able to write triggers ona single table. I can't get the rows inserted or updated when it comes to multiple tables.

    Data:

    create table emp
    (key primary empno number,)
    Ename varchar2 (20).
    DEPTNO number
    )

    create table dept
    (key primary number depno,)
    DNAME varchar2 (20)
    )

    Insert into dept values(10,'hyderabad');
    Insert into dept values(20,'bangalore');

    Insert into emp values(1,'A',10);
    Insert into emp values(2,'B',20);


    CREATE TABLE EMP_DETAILS
    AS
    SELECT E.ENAME, E.EMPNO, E.DEPTNO, D.DNAME
    Of
    EMP E, DEPT. D
    WHERE E.DEPTNO = D.DEPTNO;


    CREATE OR REPLACE PROCEDURE PROC_EMP_DETAILS (P_EMPNO EMP. EMPNO % TYPE OUT, P_ENAME EMP. ENAME OUT TYPE, P_DEPTNO EMP %. DEPTNO % TYPE OUT, P_DNAME MIN. DNAME % OUT TYPE)
    AS
    / * EXAMPLE OF CODE * /.
    BEGIN
    SELECT * FROM EMP_DETAILS;
    END;
    /

    I tried like this

    CREATE OR REPLACE TRIGGER TRIG_EMP_DETAILS
    AFTER INSERT OR UPDATE ON EMP
    FOR EACH LINE
    REFERENCING OLD AS OLD AGAIN AS NEW
    BEGIN
    INSERT INTO EMP_DETAILS VALUES(:NEW.) EMPNO,: NEW. ENAME,: NEW. DEPTNO,?)

    ???? -As a column, we get dept table how to represent that?

    Could you please guide me in this regard?



    Thanks in advance
    KVB

    Trigger on a several tables

    I think that you don't need triggers on several tables: one is enough:

    CREATE OR REPLACE TRIGGER trig_emp_details
      AFTER INSERT OR UPDATE
      ON emp
      FOR EACH ROW
    BEGIN
      INSERT INTO emp_details
        SELECT :new.empno, :new.ename, :new.deptno, dname
          FROM dept
         WHERE deptno = :new.deptno;
    END;
    
  • INSERT several TABLES + function. Bug?

    Hi all

    Be careful to insert with part = 2.
    There should be different values for id1, id2 from my understanding.
    Is it possible to invite Oracle to insert different values without making any changes to the query?
    create table t as select 0 part, 0 id1, 0 id2 from dual where 1 = 0;
    
    Table created.
    
    
    insert all
      into t(part,id1,id2)
      values (0,rnd1,rnd2)
    select dbms_random.value rnd1, dbms_random.value+0 rnd2
    from dual;
    
    1 row created.
    
    
    insert all
      into t(part,id1,id2)
      values (1,rnd1,rnd2+0)
    select dbms_random.value rnd1, dbms_random.value rnd2
    from dual;
    
    1 row created.
    
    
    insert all
      into t(part,id1,id2)
      values (2,rnd1,rnd2)
    select dbms_random.value rnd1, dbms_random.value rnd2
    from dual
    connect by level <= 2;
    
    2 rows created.
    
    
    insert all
      into t(part,id1,id2)
      values (3,rnd1,rnd2)
    select dbms_random.value rnd1, dbms_random.value rnd2 from dual
    union all select dbms_random.value rnd1, dbms_random.value rnd2 from dual;
    
    2 rows created.
    
    
    insert
      into t(part,id1,id2)
    select 4, dbms_random.value rnd1, dbms_random.value rnd2
    from dual;
    
    1 row created.
    
    
    select * from t;
    
          PART        ID1        ID2
    ---------- ---------- ----------
             0  ,67067099 ,203588234
             1 ,458983817 ,775302274
             2 ,231727889 ,231727889
             2 ,628985588 ,628985588
             3 ,125611535 ,088866927
             3 ,236116462 ,228329663
             4 ,458551972 ,735855052
    
    7 rows selected.
    Is this a bug or I missed something?
    11 GR 2

    Here's the gist of what Tom Kyte says about this at http://asktom.oracle.com/pls/asktom/f?p=100:11:0:P11_QUESTION_ID:3181424400346795479

    >
    perfect.

    I wrote thousands of times where you can't count on how many times or when or if SQL calls your function.
    . . .
    When calling SQL functions, you had better not count on how often functions get called, in what order, or whatever. In short, I guess nothing. And don't forget - SQL rewritten the blow of foot and we rewrite your SQL all the time. Do not rely on side effects

Maybe you are looking for

  • M1212nf hear a beep after each print job

    I've had my M1212nf for a few years now.  I moved last week.  I plugged it in to my new place and he started printing and scanning very well.  However, he paged now after each print job.  Clues? That someone else has proposed to the Board of Director

  • Update Firmware EQL PS4000 5.2.2 &gt; 7.12

    I need to update the firmware and this is my first time doing so. Looks like I need to go to 5.2.6 > > > > 7.1.2 7.0.7 7.0.5 6.0.5.  Who will be the right order?  How long should I wait on each step before moving on to the other?  Traps for a first t

  • Pure install Dell Inspiron 14R N4010

    I'm having great trouble to do a clean install on my laptop. I have run all Diagnostics. I have the original installation disc and I even tried the Win7 Iso from microsoft. Thinking maybe the installation disc was bad. When I do the install, it goes

  • How to open a service request / Ticket / issue

    Hi all I am now looking for some time how to open a Ticket or Service request for some issues of the iDRAC, I found. How can I submit these? Kind regards UBruns

  • Win7 Home Premium in Hungarian

    Hi, I replaced my HDD with a DDI and I would like to reinstall Win 7 in Hungarian. My Lenovo G550 came with Win 7 Home Premium x 16-96072, but I can't find my OEM installation disk and I don't have a Win7 installation disc. I have the serial number o