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 asINSERT 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 2DDD 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.0That 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
AbdulHello
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;
-
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).
ID Name of the customer Valid from Valid until the 1 CitiBank 1 JANUARY 14 JANUARY 1, 15 1 New CitiBank 2 JANUARY 15 FEBRUARY 1, 15 1 Latest CitiBank 2 FEBRUARY 15 APRIL 1, 15 And similarly the Client side ID and rating information.
ID Note Valid from Valid until the 1 Platinum 1 JANUARY 14 FEBRUARY 1, 14 1 Premium FEBRUARY 1, 14 1ST 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.
ID Name of the customer Note Valid from (Calculated) Valid until the (calculated) 1 CitiBank Platinum 1 JANUARY 14 FEBRUARY 1, 14 1 CitiBank Premium FEBRUARY 1, 14 JANUARY 1, 15 1 New CitiBank Premium 2 JANUARY 15 FEBRUARY 1, 15 1 Latest CitiBank Premium 2 FEBRUARY 15 1ST 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
OÙ 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
PawelHi 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 -
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
Tuser12943718 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
TChange 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.
-
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
and I want to create a single query (SQL) which can get data grouped by LOT_NO and only the first transaction by LOT_NOTRANS_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
Expected results:
Someone has an idea?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
Kind regards
RobHi, 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?
appreciate your time and effort in looking at this...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)
Thank you
Published by: khallas301 on March 19, 2013 09:27
typo edited... Thanks to frankkhallas301 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.
-
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
KVBTrigger 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?
Is this a bug or I missed something?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.
11 GR 2Here'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 >; 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