SQL Select into Nested Table
Hi,
I would like to be able to store results of a query in the database. So far, I believe the best method is to store it as a nested table so that I may refer to it by criteria (e.g. date, name, etc.). I am somewhat new to Oracle and I'm not sure how to do this.
The query will always return the same columns, so that should make it easier for me. Also, I need to be able to query the data that is stored into an APEX report region.
Can someone tell me if this is the best method to do this? Also, is there a tutorial anywhere that explains how to do what I want?
Thanks in advance,
-David
would like to be able to store results of a query in the database. So far,
I believe the best method is to store it as a nested table so that I may refer
to it by criteria (e.g. date, name, etc.). I am somewhat new to Oracle and
I'm not sure how to do this.Given that you're new to Oracle how did you decide the best approach was a nested table? As most people who know anything at all about Oracle would take the opposite view (as Dan has done).
Let's drill down into your requirements some more. How long do what to retain the results for? Do you want to retain the results of many queries? If so, will these queries be the same shape (same number and type of columns) or will they be different? Do you want one user to be able to see the results of another user's queries? Do you want to associate metadata with these result sets?
In fact, why do you want to be able to store these result sets at all? Oracle is actually pretty good at caching data, especially in 11g. So you may be re-inventing a wheel and designing it wonky at that.
Cheers, APC
Blog : http://radiofreetooting.blogspot.com/
Similar Messages
-
Insert data into nested tables
Hi,
Can someone please advice how can I insert data into nested tables using APEX.
I have a table "employee" and a column addresses of type address_table_type object which has address1, address2, address3 columns. I want to create form in APEX that will collect address1, address2, address3. I wonder how to do this? should the item be based in database item? if yes then how can I point to the column of address_table_type
Thanks
--AaliCan you post your tabB type, sample data, and your exact insert statement?
Is it overwriting or not commiting the inserts?
Have you traced your session to see what is happening? -
SQL> create type string_table is table of varchar(100);
2 /
Type created.
declare
v_names string_table := string_table();
begin
v_names.EXTEND(3);
v_names(1) := 'name1';
v_names(2) := 'name2';
v_names(3) := 'name3';
dbms_output.put_line(v_names(1));
dbms_output.put_line(v_names(2));
dbms_output.put_line(v_names(3));
dbms_output.put_line(v_names.COUNT());
select * from table(v_names);
end;
select * from table(v_names);
ERROR at line 12:
ORA-06550: line 12, column 7:
PLS-00428: an INTO clause is expected in this SELECT statementselect * from table(v_names);
I guess ,here you were trying to put the content of the NT into another NT, or just trying to print it.
But, I don't think INTO Clause is mandatory here.
Please check your modified code (w/o INTO) and the output :
DECLARE
TYPE string_table IS TABLE OF VARCHAR (100);
v_names string_table := string_table ();
v_test string_table := string_table ();
BEGIN
v_names.EXTEND (3);
v_names (1) := 'name1';
v_names (2) := 'name2';
v_names (3) := 'name3';
DBMS_OUTPUT.put_line ('Old collection - '||v_names (1));
DBMS_OUTPUT.put_line ('Old collection - '||v_names (2));
DBMS_OUTPUT.put_line ('Old collection - '||v_names (3));
DBMS_OUTPUT.put_line ('Old collection - '||v_names.COUNT ());
DBMS_OUTPUT.put_line (CHR(10));
/* SELECT * FROM TABLE (v_names); */
v_test := v_names;
DBMS_OUTPUT.put_line ('New collection -- '||v_test (1));
DBMS_OUTPUT.put_line ('New collection -- '||v_test (2));
DBMS_OUTPUT.put_line ('New collection -- '||v_test (3));
DBMS_OUTPUT.put_line ('New collection -- '||v_test.COUNT ());
DBMS_OUTPUT.put_line (CHR(10));
/* Printing using FOR LOOP */
FOR i IN v_test.FIRST..v_test.LAST
LOOP
DBMS_OUTPUT.put_line ('In FOR Loop --- '||v_test (i));
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Error ' ||SQLERRM|| DBMS_UTILITY.format_error_backtrace);
END;gives o/p :
Old collection - name1
Old collection - name2
Old collection - name3
Old collection - 3
New collection -- name1
New collection -- name2
New collection -- name3
New collection -- 3
In FOR Loop --- name1
In FOR Loop --- name2
In FOR Loop --- name3Refer this link -- http://docs.oracle.com/cd/E11882_01/appdev.112/e17126/tuning.htm#CIHGGBGF
Edited by: ranit B on Dec 26, 2012 2:29 PM
-- code modified
Edited by: ranit B on Dec 26, 2012 2:45 PM
-- code 'again' updated -- FOR LOOP added -
Good day All,
I am working on my first nested table and having difficulty with INSERTS. Can someone explain what I am doing wrong?
Many Thanks,
Danny
describe PAT_HOST_SYSTEM
Name Null Type
HOST_ID NOT NULL NUMBER
IPADDR NOT NULL VARCHAR2(16 CHAR)
OS VARCHAR2(50 CHAR)
OS_VERSION VARCHAR2(254 CHAR)
KERNEL VARCHAR2(75 CHAR)
KERNEL_BUILD VARCHAR2(75 CHAR)
LAST_REBOOT VARCHAR2(50 CHAR)
OS_PATCH VARCHAR2(50 CHAR)
NUM_OF_CPU VARCHAR2(20 CHAR)
GLOBAL_ZONE VARCHAR2(3)
LOCAL_ZONE VARCHAR2(3)
MACHINE VARCHAR2(255)
UPTIME VARCHAR2(50)
LAST_UPDATE DATE
ZONE_CHILDREN LOCAL_ZONE()
15 rows selected
describe LOCAL_ZONE
user type definition
TYPE local_zone AS OBJECT
(ID VARCHAR2(50),
ZONE_NAME VARCHAR2(50));
3 rows selected
INSERT INTO TABLE (SELECT ZONE_CHILDREN FROM PAT_HOST_SYSTEM WHERE HOST_ID='561') VALUES ('a808d6ceee', 'tspxxx01');
Error starting at line 1 in command:
INSERT INTO TABLE (SELECT ZONE_CHILDREN FROM PAT_HOST_SYSTEM WHERE HOST_ID='561') VALUES ('a808d6ceee', 'tspxxx01')
Error at Command Line:1 Column:12
Error report:
SQL Error: ORA-22905: cannot access rows from a non-nested table item
22905. 00000 - "cannot access rows from a non-nested table item"
*Cause: attempt to access rows of an item whose type is not known at
parse time or that is not of a nested table type
*Action: use CAST to cast the item to a nested table typeHello Danny and welcome to the forum,
are you trying to insert data into a table which has a collection as a column ?
The phrase nested table was very misleading (at least for me), also the code you posted was kinda incomplete.
I could not follow the code you posted, alternately I am posting some sample code with the DDL and insert statements for your understanding.
create or replace type emp_obj as object
ejob varchar2(100),
comm number,
edeptno number
create table employee
(ename varchar2(50),
empno number,
esal number,
edetails emp_obj
/Populating the employee table with INSERT :
insert into employee values ('KING',7839,5000,emp_obj('PRESIDENT',0,10));
insert into employee values ('BLAKE',7698,2850,emp_obj('MANAGER',0,30));Now, querying the table for all columns with SELECT :
ENAME EMPNO ESAL EDETAILS.EJOB EDETAILS.COMM EDETAILS.EDEPTNO
KING 7839 5000 PRESIDENT 0 10
BLAKE 7698 2850 MANAGER 0 30Hope it is now clear. -
Jdeveloper pl/sql webservices with Nested Tables
Hello
I am using JDeveloper 10.1.3.1.0,I have created pl/sql webservice using the nested tables. This will insert the object data into database tables.after deplying the webservice into external oc4j, when I test the webservice locally with url: http://localmachine:8888/PL_SQL_WS-Nest_Obj_Webservice-context-root/ObjWebserviceSoapHttpPort
The above web-services working and I am able to insert into the database tables.
Same when I want to access through the application server, I have changed the wsdl file soap address as
<soap:address location="http://10.91.20.7:8888/PL_SQL_WS-Nest_Obj_Webservice-context-root/ObjWebserviceSoapHttpPort"/>
When I access this url, I am able to give the input data
http://10.91.20.7:8888/PL_SQL_WS-Nest_Obj_Webservice-context-root/ObjWebserviceSoapHttpPort
but the out from the web-service is:
<env:Envelope
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<env:Fault
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>env:Server</faultcode>
<faultstring>Error creating target: DBConnImpMftest.ObjWebserviceUser</faultstring>
<faultactor/>
</env:Fault>
</env:Body>
</env:Envelope>
Could any one help to solve the above issue?
Kind regards
Malathitry that !
select a.*, case
when a.item_type = 1 then b.inv_date
when a.item_type = 3 then c.deb_date
end as item_date
from receipt_item a
left join invoice b on a.item_id = b.invvi_id and a.item_type = 1
left join Debit c on a.item_id = c.deb_id and a.item_type = 3 -
Can't insert into nested table
I can't inserted into a nested table and my SQL is listed below.
SQL> CREATE TYPE naming_t AS OBJECT (name VARCHAR2(30), alias VARCHAR2(30)) NOT FINAL;
2 /
Type created.
SQL> CREATE TYPE terminal_t;
2 /
Type created.
SQL> CREATE TYPE terminal_t_nt AS TABLE OF REF terminal_t;
2 /
Type created.
SQL> CREATE TYPE connectivitynode_t UNDER naming_t (terminals terminal_t_nt) NOT FINAL;
2 /
Type created.
SQL> CREATE TYPE connectivitynode_t_nt AS TABLE OF REF connectivitynode_t;
2 /
Type created.
SQL> CREATE TYPE terminal_t UNDER naming_t (connectivitynodes connectivitynode_t_nt) NOT FINAL;
2 /
Type created.
SQL>
SQL> CREATE TABLE naming_tb (name VARCHAR2(30), alias VARCHAR2(30));
Table created.
SQL> CREATE TABLE connectivitynode_tb (name VARCHAR2(30), terminals terminal_t_nt) NESTED TABLE terminals STORE AS terminals_tb;
Table created.
SQL> CREATE TABLE terminal_tb (name VARCHAR2(30), connectivitynodes connectivitynode_t_nt) NESTED TABLE connectivitynodes STORE AS connectivitynodes_tb;
Table created.
SQL>
SQL> INSERT INTO naming_tb (name) VALUES ('AP1.132.B/C.T1');
1 row created.
SQL> INSERT INTO terminal_tb (name) VALUES ('AP1.132.B/C.T1');
1 row created.
SQL> INSERT INTO naming_tb (name) VALUES ('AP1.132.B/C.T2');
1 row created.
SQL> INSERT INTO terminal_tb (name) VALUES ('AP1.132.B/C.T2');
1 row created.
SQL>
SQL> INSERT INTO naming_tb (name) VALUES ('AP1.132.B/C.N1');
1 row created.
SQL> INSERT INTO connectivitynode_tb (name) VALUES ('AP1.132.B/C.N1');
1 row created.
SQL> INSERT INTO TABLE (SELECT terminals FROM connectivitynode_tb WHERE name='AP1.132.B/C.N1') SELECT REF(p) FROM terminal WHERE p.name='AP1.132.B/C.T1' OR p.name='AP1.132.B/C.T2';
INSERT INTO TABLE (SELECT terminals FROM connectivitynode_tb WHERE name='AP1.132.B/C.N1') SELECT REF(p) FROM terminal WHERE p.name='AP1.132.B/C.T1' OR p.name='AP1.132.B/C.T2'
ERROR at line 1:
ORA-00942: table or view does not existI think you dont have the table terminal referred in following select statement
SELECT REF(p) FROM terminal WHERE p.name='AP1.132.B/C.T1' OR p.name='AP1.132.B/C.T2';
Chandar -
ORA-00902 on trying to Select a Nested Table
I have created a Table having Nested Table as below:
create type INT_ARRAY as table of INTEGER;
create table test1 (
id number not null,
name varchar2(500),
prot_NT int_array,
constraint test1_pk primary key(id))
STORAGE (INITIAL 512K
NEXT 512K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0)
nested table prot_NT store as prot_NT_TAB ;
And I am doing following select using an executeQuery on a PreparedStatement (I am not using any oracle extensions. I am using JDK1.2.2 on Solaris with Weblogic 5.1 appServer. jdbc driver is oracle.jdbc.driver.OracleDriver version 8.1.6.0.0):
Select id, name, prot_nt from test1
Some times this executeQuery works fine. But some times I get SQLException with "ORA-00902: invalid datatype". Same tables and same query behaves differently at different times.
Is there any problem with this usage?? Is there any known problem? I am trying to get Nested Table to a int[]. What is recommended procedure for doing this? Please help me out! Thanks in advance!By this point you've probably either solved the problem, or just dropped the database, but for anyone else interested, here's something you can do.
You can drop the queue table by setting event 10851 with the following steps:
1. Log into SQL*Plus or Server Manager as a user with DBA privileges.
2. Issue command: alter session set events '10851 trace name context forever, level 2'; Statement Processed.
3. Drop table <queue_table>; Statement Processed.
Solution Explanation: =====================
Event 10851 disables error 24005 when attempting to manually drop a queue table. It should be noted that this is the "Hard Way" of dropping queue tables, and should only be practiced after all formal procedures, i.e., using the "DBMS_AQADM.DROP_QUEUE_TABLE" procedure, has failed to drop the table.
Cheers,
Doug -
Inserting Data into nested table
I am exploring the differences between OBJECT & RECORD.
As i am still in process of learning, I found that both are structures which basically groups elements of different datatypes or columns of different datatypes, one is used in SQL and other is used in PL/SQL, please correct me if I am wrong in my understanding.
Below i am trying to insert data into an table of type object but i am unsuccessful can you please help.
CREATE OR REPLACE type sam as OBJECT
v1 NUMBER,
v2 VARCHAR2(20 CHAR)
---Nested Table---
create or replace type t_sam as table of sam;
--Inserting data----
insert into table(t_sam) values(sam(10,'Dsouza'));
Error Message:
Error starting at line 22 in command:
insert into table(t_sam) values(sam(10,'Dsouza'))
Error at Command Line:22 Column:13
Error report:
SQL Error: ORA-00903: invalid table name
00903. 00000 - "invalid table name"
*Cause:
*Action:Ariean wrote:
So only purpose of equivalent SQL types concept of nested tables is to use them as one of the data types while defining an actual table?
Sort of - you can definitely use them for more than just "defining an actual table". (I'm fairly certain you could pass a nested table into a procedure, for example - try it, though - I'm not 100% sure on that - it just "makes sense". If you can define a type, you can use it, pass it around, whatever.).
Ariean wrote:
And that nested table could be a record in SQL or an Object in PLSQL or just simple datatype(number,varchar etc)?
Nested tables are just like any other custom data type. You can create a nested table of other data types. You can create a custom data type of nested tables.
It could get stupidly .. er, stupid O_0
CREATE TYPE o_myobj1 AS object ( id1 number, cdate1 date );
CREATE TYPE t_mytype1 AS table of o_myobj1;
CREATE TYPE o_myobj2 AS object ( id2 number, dumb t_mytype1 );
CREATE TYPE t_dumber AS table of o_myobj2;
O_0
Ok, my brain's starting to hurt - I hope you get the idea
Ariean wrote:
Secondly is my understanding correct about OBJECT & RECORD?
I can't think of any benefit of describing it another way. -
Sql*loader and nested tables
I'm having trouble loading a nested table via sqlldr in Oracle 10g and was hoping someone could point me in the right direction. I keep getting the following error:
SQL*Loader-403: Referenced column not present in table mynamespace.mytable
Here's an overview of my type and table definitions:
create type mynamespace.myinfo as object
i_name varchar2(64),
i_desc varchar2(255)
create TYPE mynamespace.myinfotbl as TABLE of mynamespace.myinfo;
create table mynamespace.mytable
Info mynamespace.myinfotbl,
note varchar2(255)
NESTED TABLE Info STORE AS mytable_nested_tab;
My control file looks like this:
load data
infile 'mydatafile.csv'
insert into table mynamespace.mytable
fields terminated by ',' optionally enclosed by '"'
TRAILING NULLCOLS
Info nested table count(6)
Info column object
i_name char(64),
i_desc char(255)
note
Example mydatafile.csv would be something like:
lvl1,des1,lvl2,des2,lvl3,des3,lvl4,des4,lvl5,des5,lvl6,des6,a test data set
I can't figure out why sqlldr keeps rejecting this control file. I'm using 'direct=false' in my .par file.
Any hints?I just noticed that my email is wrong. If you can help, plese send email to [email protected]
thanks. -
Select from nested table in a nested table security problem
please help
running Oracle 9.2.0.3.0 on RH AS 2.1
I can select the inner most nested table as the creator, but can't use the same select statement as USER2.
ORA-00942: table or view does not exist
-- begin make of objects and tables
create or replace type mydata_t as object ( x float, y float);
create or replace type mydata_tab_t as table of mydata_t;
create or replace type mid_t as object (
graphname varchar2(12),
datapoints mydata_tab_t );
create or replace type mid_tab_t as table of mid_t;
create or replace type top_t as object (
someinfo int,
more_mid mid_tab_t );
create table xyz (
xyzPK int,
mainstuff top_t )
nested table mainstuff.more_mid store as mid_nt_tab
(nested table datapoints store as mydata_nt_tab)
-- grants
grant all on mydata_t to user2;
grant all on mydata_tab_t to user2;
grant all on mid_t to user2;
grant all on mid_tab_t to user2;
grant all on top_t to user2;
grant all on xyz to user2;
-- insert
insert into xyz values (1, top_t(22,mid_tab_t(mid_t('line1',mydata_tab_t(
mydata_t(0,0),
mydata_t(15,15),
mydata_t(30,30))))));
commit;
-- select fails as user2
select * from table(select Y.datapoints as DP_TAB
from table(select X.mainstuff.more_mid as MORE_TAB
from scott.xyz X
where X.xyzPK=1) Y
where Y.graphname='line1') Z;
-- select works as user2, but i need individual lines
select Y.datapoints as DP_TAB
from table(select X.mainstuff.more_mid as MORE_TAB
from scott.xyz X
where X.xyzPK=1) Y
where Y.graphname='line1';Thank you for your reply.
I have tried
select value(t) from table t;
but it is still not working. I got almost the same answer as before.
Anyway thank you very much again.
<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by MARCELO OCHOA ([email protected]):
Originally posted by meimei wu ([email protected]):
[b]I created a nested object-relational table using REF type in oracle8i. when I tried to select * from the table, I got lots of number as the ref type values, but actually, the value in ref type should be of type varchar2 and number. The number I got looked like following code:
JARTICLE_REF_TYPE(000022020876108427C2FE0D00E0340800208FD71F76103B99B12009C0E0340800208FD71F,
Does anyone know how I can get the actual value that I inserted into the nested table?
your help is appreciated.<HR></BLOCKQUOTE>
Try this:
select value(t) from table t;
Best regards, Marcelo.
null -
Hi,
I create following types and table:
CREATE OR REPLACE TYPE obj_query AS OBJECT
(emp_id NUMBER(6)
,emp_first VARCHAR2(20)
,emp_last VARCHAR2(25));
CREATE OR REPLACE TYPE tab_query AS TABLE OF obj_query;
CREATE TABLE queryEmp
(id_row NUMBER
,beginTrans VARCHAR2(15)
,queryA VARCHAR2(100)
,resultEmp tab_query)
NESTED TABLE resultEmp
STORE AS nested_queryEmp;
I would like the output of the table queryEmp like this:
id_row beginTrans queryA emp_id emp_first emp_last
1 15:00 Select1 100 Joe King
101 John Queen
2 15:10 Select2 100 Leo King
101 Mett Queen
But Can I get this result with only SQL SELECT statement from this table?
I don't want to use PL/SQL, only SELECT in SQL*Plus.
Thank you
I'm sorry but output looks so bad.
So, I want to get the one row of id_row, beginTrans, queryA and all rows of nested table dmlStats to this "main" row and so on.
But not in PL/SQL
I hope, you understand me.
Thanks
Edited by: user9357436 on 2.11.2011 5:18
Edited by: user9357436 on 2.11.2011 5:25Arvind Ayengar wrote:
Can you please explain things in details, and just ensure you are in the correct forum.Is this reply directed at me or the OP? -
Using FOR .. LOOP counter in handling of PL/SQL procedures with nest. table
Hi all!
I'm learning PL/SQL on Steve Bobrovsky's book (specified below sample is from it) and I've a question.
In the procedure of specified below program used an integer variable currentElement to get reference to the row of nested table of %ROWTYPE datatype.
Meanwhile, the program itself uses a common FOR .. LOOP counter i.
DECLARE
TYPE partsTable IS TABLE OF parts%ROWTYPE;
tempParts partsTable := partsTable();
CURSOR selectedParts IS
SELECT * FROM parts ORDER BY id;
currentPart selectedParts%ROWTYPE;
currentElement INTEGER;
PROCEDURE printParts(p_title IN VARCHAR2, p_collection IN partsTable) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE(p_title || ' elements: ' || p_collection.COUNT);
currentElement := p_collection.FIRST;
FOR i IN 1 .. p_collection.COUNT
LOOP
DBMS_OUTPUT.PUT('Element #' || currentElement || ' is ');
IF tempParts(currentElement).id IS NULL THEN DBMS_OUTPUT.PUT_LINE('an empty element.');
ELSE DBMS_OUTPUT.PUT_LINE('ID: ' || tempParts(currentElement).id || ' DESCRIPTION: ' || tempParts(currentElement).description);
END IF;
currentElement := p_collection.NEXT(currentElement);
END LOOP;
END printParts;
BEGIN
FOR currentPart IN selectedParts
LOOP
tempParts.EXTEND(2);
tempParts(tempParts.LAST) := currentPart;
END LOOP;
printParts('Densely populated', tempParts);
FOR i IN 1 .. tempParts.COUNT
LOOP
IF tempParts(i).id is NULL THEN tempParts.DELETE(i);
END IF;
END LOOP;
FOR i IN 1 .. 50
LOOP
DBMS_OUTPUT.PUT('-');
END LOOP;
printParts('Sparsely populated', tempParts);
END;
/When I've substituted an INTEGER global variable with such FOR .. LOOP counter, an APEX have returned an error "ORA-01403: no data found".
DECLARE
TYPE partsTable IS TABLE OF parts%ROWTYPE;
tempParts partsTable := partsTable();
CURSOR selectedParts IS
SELECT * FROM parts ORDER BY id;
currentPart selectedParts%ROWTYPE;
PROCEDURE printParts(p_title IN VARCHAR2, p_collection IN partsTable) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE(p_title || ' elements: ' || p_collection.COUNT);
FOR i IN 1 .. p_collection.COUNT
LOOP
DBMS_OUTPUT.PUT('Element is ');
IF tempParts(i).id IS NULL THEN DBMS_OUTPUT.PUT_LINE('an empty element.');
ELSE DBMS_OUTPUT.PUT_LINE('ID: ' || tempParts(i).id || ' DESCRIPTION: ' || tempParts(i).description);
END IF;
END LOOP;
END printParts;
BEGIN
FOR currentPart IN selectedParts
LOOP
tempParts.EXTEND(2);
tempParts(tempParts.LAST) := currentPart;
END LOOP;
printParts('Densely populated', tempParts);
FOR i IN 1 .. tempParts.COUNT
LOOP
IF tempParts(i).id is NULL THEN tempParts.DELETE(i);
END IF;
END LOOP;
FOR i IN 1 .. 50
LOOP
DBMS_OUTPUT.PUT('-');
END LOOP;
printParts('Sparsely populated', tempParts);
END;
/When I've tried to handle this code in SQL*Plus, the following picture have appeared:
Densely populated elements: 10
Element is an empty element.
Element is ID: 1 DESCRIPTION: Fax Machine
Element is an empty element.
Element is ID: 2 DESCRIPTION: Copy Machine
Element is an empty element.
Element is ID: 3 DESCRIPTION: Laptop PC
Element is an empty element.
Element is ID: 4 DESCRIPTION: Desktop PC
Element is an empty element.
Element is ID: 5 DESCRIPTION: Scanner
Sparsely populated elements: 5
DECLARE
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 14
ORA-06512: at line 35What's wrong in code(or what I have not understood)? Help please!942736 wrote:
What's wrong in code(or what I have not understood)? Help please!First code. You have collection of 10 elements:
1 - null
2 - populated
3 - null
4 - populated
5 - null
6 - populated
7 - null
8 - populated
9 - null
10 - populated
Then you delete null elements and have 5 element collection
2 - populated
4 - populated
6 - populated
8 - populated
10 - populated
Now you execute:
printParts('Sparsely populated', tempParts);Inside procedure you execute:
currentElement := p_collection.FIRST;
This assingns currentElement value 2. Then procedure loops 5 times (collection element count is 5). Element 2 exists. Inside loop procedure executes:
currentElement := p_collection.NEXT(currentElement);
which assigns currentElement values 4,6,8,10 - all existing elements.
Now second code. Everything is OK until you delete null elements. Again we have:
2 - populated
4 - populated
6 - populated
8 - populated
10 - populated
Again you execute:
printParts('Sparsely populated', tempParts);Now procedure loops 5 times (i values are 1,2,3,4,5):
FOR i IN 1 .. p_collection.COUNT
Very first iteration assingns i value 1. And since collection has no element with substript 1 procedure raises no data found.
SY. -
Lookup by SQL select in ODS tables and source package
Hi all
I load FI data in ODS and need some extra info from older ODS records.
In my Update rule for target InfoObject I created 2 SQL selects on Active Data and New data tables of ODS. Selects worked fine while testing them as separate program, but I got no data while data load.
I guess, the data I need was in the same data package during data load. So I assume, besides Active/New data selects, I need to check data on SOURCE_PACKAGE. Is it possible on update rule level of InfoObject? Could you please, provide me some ABAP example?
thanx in advance, points will be awarded.SELECT in field routine:
==========================================================
DATA src_doc_no(10) TYPE c.
DATA src_item_num(3) TYPE c.
DATA src_year(5) TYPE c.
DATA src_doc_typ(2) TYPE c.
if ( COMM_STRUCTURE-AC_DOC_TYP = 'DD' or COMM_STRUCTURE-AC_DOC_TYP =
'LD' ) and STRLEN( COMM_STRUCTURE-REF_KEY3 ) = 17.
CONCATENATE COMM_STRUCTURE-REF_KEY3+0(4) '%' INTO src_year.
src_item_num = COMM_STRUCTURE-REF_KEY3+15(3).
src_doc_no = COMM_STRUCTURE-REF_KEY3+4(10).
select from NEW data of ODS:
SELECT AC_DOC_TYP into src_doc_typ
FROM /BI0/AFIAR_O0340
WHERE COMP_CODE = COMM_STRUCTURE-COMP_CODE
AND DEBITOR = COMM_STRUCTURE-DEBITOR
AND FISCVARNT = COMM_STRUCTURE-FISCVARNT
AND AC_DOC_NO = src_doc_no
AND ITEM_NUM = src_item_num
AND FISCPER like src_year.
endselect.
if src_doc_typ = ''.
select from ACTIVE data of ODS:
SELECT AC_DOC_TYP into src_doc_typ
FROM /BI0/AFIAR_O0300
WHERE COMP_CODE = COMM_STRUCTURE-COMP_CODE
AND DEBITOR = COMM_STRUCTURE-DEBITOR
AND FISCVARNT = COMM_STRUCTURE-FISCVARNT
AND AC_DOC_NO = src_doc_no
AND ITEM_NUM = src_item_num
AND FISCPER like src_year.
endselect.
endif.
RESULT = src_doc_typ.
endif.
============================================ -
Value select from nested table
CREATE TYPE test AS OBJECT (
test1 varchar2(10),
test2 varchar2(10));
create or replace type test2 as table of test;
two record are there within object type.then how i will select value from nested table.How many times are you going to ask this question before you either look at the response I have given to Re: how i will display type like (nestedtable or varrays or pl/sql table).?
You have posted often enough to this forum to know the ettiquette by now.
Regards, APC -
Hello. In both sybase and sql server, you
can create on-the-fly tables in sql by
simply doing a
select column
into newtable
from oldtable
where blahblahblah
When I do the same in sql (not pl/sql)
I get the following error:
SQL> select empno
2 into myemp
3 from emp
4 where ename = 'SMITH';
into myemp
ERROR at line 2:
ORA-00905: missing keyword
Is it possible to do this kind of select into
in Oracle?
Thanks!I believe the syntax you're looking for is:
create table <tablename>
as select *
from (<original statement>)
More examples are available in the Migration Workbench docs
Maybe you are looking for
-
Best practice for workflow triggering from Web Dynpro UI
Hello, workflow community! I'm working on a task which allow to trigger the workflow by clicking a button in Web Dynpro UI. As always, there are multiple ways to do that, for instance, to use SAP Workflow API (SAP_WAPI_START_WORKFLOW) or to raise an
-
Alright, this have been a painful day trying to solve this and I am pulling my hair out. So I decided to download the FB4.7 trial for some test with AIR13, and after an indecent amount of hours trying to install the latest player and android sdk (why
-
A quick question. Can my fairly new 27" iMac use the older 24" iMac as a second monitor? If so, is it necessary to upgrade the older iMac? Thanks.
-
[Athlon64] help me
i have 768mb of ram in my pc. runs fine. then i installed one more 256 mb of ram and my pc goes crazy. when i turn on the pc i always get error. says that it has uncover an error and had to shut down. i have a k8t neo with amd 64bit processor. anybod
-
Change to Audio CD File Format?
Has there been a recent change in the way Leopard presents files when a normal audio CD is simply mounted in Finder? I could swear they used to be presented as WAV files as recently as, say, October 2008. They're currently showing as AIFF. Is there a