About Collection and ForAll
Dear Guru
1) I have some documents about collection of 10g
and example of Forall function.
2) Question: I have procedure called Test_ps
How to see the source code of the procedure
A : User_source
But i want to see how my parameter are there in procedure is there any option ?
Advance Thanks..
you can use DSEC <Procedure_Name> to see the list of arguments
PRAZY@11gR1> create or replace procedure test_proc(a number,b number) is
2 begin
3 null;
4 end;
5 /
Procedure created.
Elapsed: 00:00:00.01
PRAZY@11gR1> select text from user_source where name='TEST_PROC' order by line;
TEXT
procedure test_proc(a number,b number) is
begin
null;
end;
Elapsed: 00:00:00.01
PRAZY@11gR1> desc test_proc;
PROCEDURE test_proc
Argument Name Type In/Out Default?
A NUMBER IN
B NUMBER INRegards,
Prazy
Similar Messages
-
BULK COLLECT and FORALL with dynamic INSERT.
Hello,
I want to apply BULK COLLECT and FORALL feature for a insert statement in my procedure for performance improvements as it has to insert a huge amount of data.
But the problem is that the insert statement gets generated dynamically and even the table name is found at the run-time ... so i am not able to apply the performance tuning concepts.
See below the code
PROCEDURE STP_MES_INSERT_GLOBAL_TO_MAIN
(P_IN_SRC_TABLE_NAME VARCHAR2 ,
P_IN_TRG_TABLE_NAME VARCHAR2 ,
P_IN_ED_TRIG_ALARM_ID NUMBER ,
P_IN_ED_CATG_ID NUMBER ,
P_IN_IS_PIECEID_ALARM IN CHAR,
P_IN_IS_LAST_RECORD IN CHAR
IS
V_START_DATA_ID NUMBER;
V_STOP_DATA_ID NUMBER;
V_FROM_DATA_ID NUMBER;
V_TO_DATA_ID NUMBER;
V_MAX_REC_IN_LOOP NUMBER := 30000;
V_QRY1 VARCHAR2(32767);
BEGIN
EXECUTE IMMEDIATE 'SELECT MIN(ED_DATA_ID), MAX(ED_DATA_ID) FROM '|| P_IN_SRC_TABLE_NAME INTO V_START_DATA_ID , V_STOP_DATA_ID;
--DBMS_OUTPUT.PUT_LINE('ORIGINAL START ID := '||V_START_DATA_ID ||' ORIGINAL STOP ID := ' || V_STOP_DATA_ID);
V_FROM_DATA_ID := V_START_DATA_ID ;
IF (V_STOP_DATA_ID - V_START_DATA_ID ) > V_MAX_REC_IN_LOOP THEN
V_TO_DATA_ID := V_START_DATA_ID + V_MAX_REC_IN_LOOP;
ELSE
V_TO_DATA_ID := V_STOP_DATA_ID;
END IF;
LOOP
BEGIN
LOOP
V_QRY1 := ' INSERT INTO '||P_IN_TRG_TABLE_NAME||
' SELECT * FROM '||P_IN_SRC_TABLE_NAME ||
' WHERE ED_DATA_ID BETWEEN ' || V_FROM_DATA_ID ||' AND ' || V_TO_DATA_ID;
EXECUTE IMMEDIATE V_QRY1;
commit;
V_FROM_DATA_ID := V_TO_DATA_ID + 1;
IF ( V_STOP_DATA_ID - V_TO_DATA_ID > V_MAX_REC_IN_LOOP ) THEN
V_TO_DATA_ID := V_TO_DATA_ID + V_MAX_REC_IN_LOOP;
ELSE
V_TO_DATA_ID := V_TO_DATA_ID + (V_STOP_DATA_ID - V_TO_DATA_ID);
END IF;
EXCEPTION
WHEN OTHERS THEN.............
....................so on Now you can observer here that P_IN_SRC_TABLE_NAME is the source table name which we get as a parameter at run-time. I have used 2 table in the insert statement P_IN_TRG_TABLE_NAME (in which i have to insert data) and P_IN_SRC_TABLE_NAME(from where i have to insert data)
V_QRY1 := ' INSERT INTO '||P_IN_TRG_TABLE_NAME||
' SELECT * FROM '||P_IN_SRC_TABLE_NAME ||
' WHERE ED_DATA_ID BETWEEN ' || V_FROM_DATA_ID ||' AND ' || V_TO_DATA_ID;
EXECUTE IMMEDIATE V_QRY1;now when i appy the bulk collect and forall feature i am facing the out of scope problem....see the code below ...
BEGIN
EXECUTE IMMEDIATE 'SELECT MIN(ED_DATA_ID), MAX(ED_DATA_ID) FROM '|| P_IN_SRC_TABLE_NAME INTO V_START_DATA_ID , V_STOP_DATA_ID;
--DBMS_OUTPUT.PUT_LINE('ORIGINAL START ID := '||V_START_DATA_ID ||' ORIGINAL STOP ID := ' || V_STOP_DATA_ID);
V_FROM_DATA_ID := V_START_DATA_ID ;
IF (V_STOP_DATA_ID - V_START_DATA_ID ) > V_MAX_REC_IN_LOOP THEN
V_TO_DATA_ID := V_START_DATA_ID + V_MAX_REC_IN_LOOP;
ELSE
V_TO_DATA_ID := V_STOP_DATA_ID;
END IF;
LOOP
DECLARE
TYPE TRG_TABLE_TYPE IS TABLE OF P_IN_SRC_TABLE_NAME%ROWTYPE;
V_TRG_TABLE_TYPE TRG_TABLE_TYPE;
CURSOR TRG_TAB_CUR IS
SELECT * FROM P_IN_SRC_TABLE_NAME
WHERE ED_DATA_ID BETWEEN V_FROM_DATA_ID AND V_TO_DATA_ID;
V_QRY1 varchar2(32767);
BEGIN
OPEN TRG_TAB_CUR;
LOOP
FETCH TRG_TAB_CUR BULK COLLECT INTO V_TRG_TABLE_TYPE LIMIT 30000;
FORALL I IN 1..V_TRG_TABLE_TYPE.COUNT
V_QRY1 := ' INSERT INTO '||P_IN_TRG_TABLE_NAME||' VALUES V_TRG_TABLE_TYPE(I);'
EXECUTE IMMEDIATE V_QRY1;
EXIT WHEN TRG_TAB_CUR%NOTFOUND;
END LOOP;
CLOSE TRG_TAB_CUR;
V_FROM_DATA_ID := V_TO_DATA_ID + 1;
IF ( V_STOP_DATA_ID - V_TO_DATA_ID > V_MAX_REC_IN_LOOP ) THEN
V_TO_DATA_ID := V_TO_DATA_ID + V_MAX_REC_IN_LOOP;
ELSE
V_TO_DATA_ID := V_TO_DATA_ID + (V_STOP_DATA_ID - V_TO_DATA_ID);
END IF;
EXCEPTION
WHEN OTHERS THEN.........so on
But the above code is not helping me , what i am doing wrong ??? how can i tune this dynamically generated statement to use bulk collect for better performace ......
Thanks in Advance !!!!Hello,
a table name cannot be bind as a parameter in SQL, this wont't compile:
EXECUTE IMMEDIATE ' INSERT INTO :1 VALUES ......
USING P_IN_TRG_TABLE_NAME ...but this should work:
EXECUTE IMMEDIATE ' INSERT INTO ' || P_IN_TRG_TABLE_NAME || ' VALUES ......You cannot declare a type that is based on a table which name is in a variable.
PL/SQL is stronly typed language, a type must be known at compile time, a code like this is not allowed:
PROCEDURE xx( src_table_name varchar2 )
DECLARE
TYPE tab IS TABLE OF src_table_name%ROWTYPE;
...This can be done by creating one big dynamic SQL - see example below (tested on Oracle 10 XE - this is a slightly simplified version of your procedure):
CREATE OR REPLACE
PROCEDURE stp1(
p_in_src_table_name VARCHAR2 ,
p_in_trg_table_name VARCHAR2 ,
v_from_data_id NUMBER := 100,
v_to_data_id NUMBER := 100000
IS
BEGIN
EXECUTE IMMEDIATE q'{
DECLARE
TYPE trg_table_type IS TABLE OF }' || p_in_src_table_name || q'{%ROWTYPE;
V_TRG_TABLE_TYPE TRG_TABLE_TYPE;
CURSOR TRG_TAB_CUR IS
SELECT * FROM }' || p_in_src_table_name ||
q'{ WHERE ED_DATA_ID BETWEEN :V_FROM_DATA_ID AND :V_TO_DATA_ID;
BEGIN
OPEN TRG_TAB_CUR;
LOOP
FETCH TRG_TAB_CUR BULK COLLECT INTO V_TRG_TABLE_TYPE LIMIT 30000;
FORALL I IN 1 .. V_TRG_TABLE_TYPE.COUNT
INSERT INTO }' || p_in_trg_table_name || q'{ VALUES V_TRG_TABLE_TYPE( I );
EXIT WHEN TRG_TAB_CUR%NOTFOUND;
END LOOP;
CLOSE TRG_TAB_CUR;
END; }'
USING v_from_data_id, v_to_data_id;
COMMIT;
END;But this probably won't give any performace improvements. Bulk collect and forall can give performance improvements when there is a DML operation inside a loop,
and this one single DML operates on only one record or relatively small number of records, and this DML is repeated many many times in the loop.
I guess that your code is opposite to this - it contains insert statement that operates on many records (one single insert ~ 30000 records),
and you are trying to replace it with bulk collect/forall - INSERT INTO ... SELECT FROM will almost alwayst be faster than bulk collect/forall.
Look at simple test - below is a procedure that uses INSERT ... SELECT :
CREATE OR REPLACE
PROCEDURE stp(
p_in_src_table_name VARCHAR2 ,
p_in_trg_table_name VARCHAR2 ,
v_from_data_id NUMBER := 100,
v_to_data_id NUMBER := 100000
IS
V_QRY1 VARCHAR2(32767);
BEGIN
V_QRY1 := ' INSERT INTO '|| P_IN_TRG_TABLE_NAME ||
' SELECT * FROM '|| P_IN_SRC_TABLE_NAME ||
' WHERE ed_data_id BETWEEN :f AND :t ';
EXECUTE IMMEDIATE V_QRY1
USING V_FROM_DATA_ID, V_TO_DATA_ID;
COMMIT;
END;
/and we can compare both procedures:
SQL> CREATE TABLE test333
2 AS SELECT level ed_data_id ,
3 'XXX ' || LEVEL x,
4 'YYY ' || 2 * LEVEL y
5 FROM dual
6 CONNECT BY LEVEL <= 1000000;
Table created.
SQL> CREATE TABLE test333_dst AS
2 SELECT * FROM test333 WHERE 1 = 0;
Table created.
SQL> set timing on
SQL> ed
Wrote file afiedt.buf
1 BEGIN
2 FOR i IN 1 .. 100 LOOP
3 stp1( 'test333', 'test333_dst', 1000, 31000 );
4 END LOOP;
5* END;
SQL> /
PL/SQL procedure successfully completed.
Elapsed: 00:00:22.12
SQL> ed
Wrote file afiedt.buf
1 BEGIN
2 FOR i IN 1 .. 100 LOOP
3 stp( 'test333', 'test333_dst', 1000, 31000 );
4 END LOOP;
5* END;
SQL> /
PL/SQL procedure successfully completed.
Elapsed: 00:00:14.86without bulk collect ~ 15 sec.
bulk collect version ~ 22 sec. .... 7 sec longer / 15 sec. = about 45% performance decrease. -
How to use Bulk Collect and Forall
Hi all,
We are on Oracle 10g. I have a requirement to read from table A and then for each record in table A, find matching rows in table B and then write the identified information in table B to the target table (table C). In the past, I had used two ‘cursor for loops’ to achieve that. To make the new procedure, more efficient, I would like to learn to use ‘bulk collect’ and ‘forall’.
Here is what I have so far:
DECLARE
TYPE employee_array IS TABLE OF EMPLOYEES%ROWTYPE;
employee_data employee_array;
TYPE job_history_array IS TABLE OF JOB_HISTORY%ROWTYPE;
Job_history_data job_history_array;
BatchSize CONSTANT POSITIVE := 5;
-- Read from File A
CURSOR c_get_employees IS
SELECT Employee_id,
first_name,
last_name,
hire_date,
job_id
FROM EMPLOYEES;
-- Read from File B based on employee ID in File A
CURSOR c_get_job_history (p_employee_id number) IS
select start_date,
end_date,
job_id,
department_id
FROM JOB_HISTORY
WHERE employee_id = p_employee_id;
BEGIN
OPEN c_get_employees;
LOOP
FETCH c_get_employees BULK COLLECT INTO employee_data.employee_id.LAST,
employee_data.first_name.LAST,
employee_data.last_name.LAST,
employee_data.hire_date.LAST,
employee_data.job_id.LAST
LIMIT BatchSize;
FORALL i in 1.. employee_data.COUNT
Open c_get_job_history (employee_data(i).employee_id);
FETCH c_get_job_history BULKCOLLECT INTO job_history_array LIMIT BatchSize;
FORALL k in 1.. Job_history_data.COUNT LOOP
-- insert into FILE C
INSERT INTO MY_TEST(employee_id, first_name, last_name, hire_date, job_id)
values (job_history_array(k).employee_id, job_history_array(k).first_name,
job_history_array(k).last_name, job_history_array(k).hire_date,
job_history_array(k).job_id);
EXIT WHEN job_ history_data.count < BatchSize
END LOOP;
CLOSE c_get_job_history;
EXIT WHEN employee_data.COUNT < BatchSize;
END LOOP;
COMMIT;
CLOSE c_get_employees;
END;
When I run this script, I get
[Error] Execution (47: 17): ORA-06550: line 47, column 17:
PLS-00103: Encountered the symbol "OPEN" when expecting one of the following:
. ( * @ % & - + / at mod remainder rem select update with
<an exponent (**)> delete insert || execute multiset save
merge
ORA-06550: line 48, column 17:
PLS-00103: Encountered the symbol "FETCH" when expecting one of the following:
begin function package pragma procedure subtype type use
<an identifier> <a double-quoted delimited-identifier> form
current cursorWhat is the best way to code this? Once, I learn how to do this, I apply the knowledge to the real application in which file A would have around 200 rows and file B would have hundreds of thousands of rows.
Thank you for your guidance,
SeyedHello BlueShadow,
Following your advice, I modified a stored procedure that initially was using two cursor for loops to read from tables A and B to write to table C to use instead something like your suggestion listed below:
INSERT INTO tableC
SELECT …
FROM tableA JOIN tableB on (join condition).I tried this change on a procedure writing to tableC with keys disabled. I will try this against the real table that has primary key and indexes and report the result later.
Thank you very much,
Seyed -
Binds collections and forall statement
version 9.2.0.6
I would like to make this more dynamic in that the collection cList can be used only once and be used by all bind variables. The variable stmt would be dynamically generated in that case it would insert into any number of tables.
Can this be done?
Is this feature available in a newer version of Oracle?
create table d2 nologging as
select
rownum rn
,substr(dbms_random.string('x',5),1,10) v1
,sysdate d1
,round(dbms_random.value(1,10)) n1
,substr(dbms_random.string('x',5),1,10) v2
,rpad(' ',4000,' ') as concat
from dual connect by level <= 100;
-- no rows for our test
create table d3 nologging as
select
from d2 where 1 = 2;
-- setup for our test
update d2
set image = rpad(nvl(to_char(rn),' '),10,' ')
|| rpad(nvl(v1,' '),20,' ')
|| rpad(nvl(to_char(d1,'DD-MON-YYYY HH24:MI:SS'),' '),34,' ')
|| rpad(nvl(to_char(n1),' '),10,' ')
|| rpad(nvl(v2,' '),10,' ')
-- test got all locations right
select
to_number(rtrim(substr(image,1,10)))
,rtrim(substr(image,11,20))
,to_date(rtrim(substr(image,30,34)),'DD-MON-YYYY HH24:MI:SS')
,to_number(rtrim(substr(image,65,10))) AS n1
,rtrim(substr(image,75,10))
from d2;
-- here is where we do the work
declare
type charList is table of varchar2(4000);
cList charList;
d2l d2_list;
errors NUMBER;
dml_errors EXCEPTION;
PRAGMA exception_init(dml_errors, -24381);
sqlStmt varchar2(32000);
cursor cur is select image from d2;
bcLimit number := 23;
begin
sqlStmt := 'insert into d3 (rn,v1,d1,n1,v2)'
|| 'values (to_number(rtrim(substr(:a,1,10)))
,rtrim(substr(:a,11,20))
,to_date(rtrim(substr(:a,30,34)),''DD-MON-YYYY HH24:MI:SS'')
,to_number(rtrim(substr(:a,65,10)))
,rtrim(substr(:a,75,10)))';
open cur;
loop
fetch cur bulk collect into cList limit bcLimit;
exit when cList.count = 0;
begin
-- very very unfortunately the code is unable to have one using clause variable be applied to all bind variables
-- note the number of cList uses having the bind variables all name the same does not help
-- using only one gets a ORA-1008 error :(
FORALL i IN cList.FIRST..cList.LAST SAVE EXCEPTIONS execute immediate sqlstmt using cList(i),cList(i),cList(i),cList(i),cList(i);
-- FORALL i IN cList.FIRST..cList.LAST SAVE EXCEPTIONS execute immediate sqlstmt using cList(i); --< DOES NOT WORK :( I WISH IT WOULD!
EXCEPTION
WHEN dml_errors THEN
errors := SQL%BULK_EXCEPTIONS.COUNT;
dbms_output.put_line('number of errors is ' || errors);
FOR i IN 1..errors LOOP
dbms_output.put_line('Error ' || i || ' occurred during iteration ' || SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
dbms_output.put_line('Could not insert ' || cList(SQL%BULK_EXCEPTIONS(i).ERROR_INDEX));
dbms_output.put_line(SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE));
END LOOP;
end;
end loop;
close cur;
dbms_output.put_line('h2');
end;
/The CREATE TABLE you post for table D2 has no column called 'image'. It would help somewhat if you posted a working example.
Also I am not clear why the INSERT INTO D3 statement in the anonymous block needs to be dynamic. -
Extra overhead with Collection and List types
The documentation says about Collection and List types :
"There is extra overhead for Kodo to maintain collections where each
element is not guaranteed to be unique."
Why is it so ?
Thanks in advance.
Regards.We can make some optimizations when we know each element is unique.
-
Using bulk collect and for all to solve a problem
Hi All
I have a following problem.
Please forgive me if its a stupid question :-) im learning.
1: Data in a staging table xx_staging_table
2: two Target table t1, t2 where some columns from xx_staging_table are inserted into
Some of the columns from the staging table data are checked for valid entries and then some columns from that row will be loaded into the two target tables.
The two target tables use different set of columns from the staging table
When I had a thousand records there was no problem with a direct insert but it seems we will now have half a million records.
This has slowed down the process considerably.
My question is
Can I use the bulk collect and for all functionality to get specific columns from a staging table, then validate the row using those columns
and then use a bulk insert to load the data into a specific table.?
So code would be like
get_staging_data cursor will have all the columns i need from the staging table
cursor get_staging_data
is select * from xx_staging_table (about 500000) records
Use bulk collect to load about 10000 or so records into a plsql table
and then do a bulk insert like this
CREATE TABLE t1 AS SELECT * FROM all_objects WHERE 1 = 2;
CREATE OR REPLACE PROCEDURE test_proc (p_array_size IN PLS_INTEGER DEFAULT 100)
IS
TYPE ARRAY IS TABLE OF all_objects%ROWTYPE;
l_data ARRAY;
CURSOR c IS SELECT * FROM all_objects;
BEGIN
OPEN c;
LOOP
FETCH c BULK COLLECT INTO l_data LIMIT p_array_size;
FORALL i IN 1..l_data.COUNT
INSERT INTO t1 VALUES l_data(i);
EXIT WHEN c%NOTFOUND;
END LOOP;
CLOSE c;
END test_proc;
In the above example t1 and the cursor have the same number of columns
In my case the columns in the cursor loop are a small subset of the columns of table t1
so can i use a forall to load that subset into the table t1? How does that work?
Thanks
Juser7348303 wrote:
checking if the value is valid and theres also some conditional processing rules ( such as if the value is a certain value no inserts are needed)
which are a little more complex than I can put in a simpleWell, if the processing is too complex (and conditional) to be done in SQL, then doing that in PL/SQL is justified... but will be slower as you are now introducing an additional layer. Data now needs to travel between the SQL layer and PL/SQL layer. This is slower.
PL/SQL is inherently serialised - and this also effects performance and scalability. PL/SQL cannot be parallelised by Oracle in an automated fashion. SQL processes can.
To put in in simple terms. You create PL/SQL procedure Foo that processes SQL cursor and you execute that proc. Oracle cannot run multiple parallel copies of Foo. It perhaps can parallelise that SQL cursor that Foo uses - but not Foo itself.
However, if Foo is called by the SQL engine it can run in parallel - as the SQL process calling Foo is running in parallel. So if you make Foo a pipeline table function (written in PL/SQL), and you design and code it as a thread-safe/parallel enabled function, it can be callled and used and executed in parallel, by the SQL engine.
So moving your PL/SQL code into a parallel enabled pipeline function written in PL/SQL, and using that function via parallel SQL, can increase performance over running that same basic PL/SQL processing as a serialised process.
This is of course assuming that the processing that needs to be done using PL/SQL code, can be designed and coded for parallel processing in this fashion. -
Empty Collections and Empty Tags
It seems that empty collections from a cast or cursor result in an empty tag. For example, the following sql:select work.work_id medlineid,
cursor(
select
databankname,
db.accessionnumberlist_ref.accessionnumberlist accessionnumberlist
from table(dbl.databanks) db
order by databankname) databanklist,
cast( multiset (
select chemical_t(
wrkchm.cas_registry_number,
wrkchm.term)
from work_chemicals wrkchm
where wrkchm.work_id=work.work_id
order by wrkchm.term) as chemicals_t) chemicallist
from
works work,
databanklist_t_v dbl
where
work.work_id = 96264942
and work.work_id = dbl.work_id(+)results in the following XML:<medlinecitationset>
<medlinecitation num="1">
<medlineid>96264942</medlineid>
<databanklist/>
<chemicallist/>
</medlinecitation>
</medlinecitationset>Is there a way to not have these empty tags appear?
Thanks! -- John.
nullDavid, this is about understanding the use of, and differencies between tags and collections. This is a bit hard for many new users.
First of all searching for collections and tags can *not* be done simultaneously. You can either work with one collection only, or you can search for pictures with one or more tags.
Next collections should be used as either temporary work sets or for special occasions like specific vacations, trips or birthdays, e.g. "Anna 5 years". You say you have a collection named "Churches". I think would have made a TAG called "Churches" instead, because a tag is for general searches that can be combined. On the other hand I might have made a collection called "Church visits July 2005" or "Summer vacation 2005" or the like.
Another difference is that pictures in a collection can be sorted manually by drag & drop, while pictures found via tags always are shown in the order chosen in the Photo Browser Arrangement box shown bottom left in the Organizer. -
It is possible to use a VOD HTTP Stream in an iTunes U Collection and/or Course?
We wish to better comply with TEACH Act guidelines by using VOD (video on demand as opposed to real-time streaming) HTTP Streaming where an instructor is asserting educational fair use of copyrighted material. The key component in TEACH guidelines is that the student not be able to retain the materials beyond the duration of the course. Thus, VOD HTTP Streaming will meet this specification nicely and is supported across all of iOS and MacOS X.
Thus, the question: It is possible to use a VOD HTTP Stream in an iTunes U Collection and/or Course?I knew about that, but my question is, if it is possible to use an europe power adapter.
Because i dont want to a carry around an power adapter and a plugin adapter.
I hope you understand what i mean.
Sorry for my english
Best. -
Hi All,
Could someone help me in solving the error 'DML statement without BULK In-BIND cannot be used inside FORALL'. I am getting the error when running the following query.
DECLARE
v_seq_row_id NUMBER;
TYPE ap_addr_tt IS TABLE OF IN_EIM_ADDR_PER.AP_ADDR%TYPE;
TYPE ap_addr_name_tt IS TABLE OF IN_EIM_ADDR_PER.AP_ADDR_NAME%TYPE;
TYPE ap_disc_flg_tt IS TABLE OF IN_EIM_ADDR_PER.AP_DISACLEANSE_FLG%TYPE;
TYPE ap_name_lock_flg_tt IS TABLE OF IN_EIM_ADDR_PER.AP_NAME_LOCK_FLG%TYPE;
TYPE ap_pre_flg_tt IS TABLE OF IN_EIM_ADDR_PER.AP_PREMISE_FLG%TYPE;
coll_v_AP_ADDR ap_addr_tt;
coll_v_AP_ADDR_NAME ap_addr_tt;
coll_v_AP_DISACLEANSE_FLG ap_disc_flg_tt;
coll_v_AP_NAME_LOCK_FLG ap_name_lock_flg_tt;
coll_v_AP_PREMISE_FLG ap_pre_flg_tt;
BEGIN
SELECT
DISTINCT(AP_ADDR),
AP_ADDR_NAME,
AP_DISACLEANSE_FLG,
AP_NAME_LOCK_FLG,
AP_PREMISE_FLG
BULK COLLECT INTO
coll_v_AP_ADDR,
coll_v_AP_ADDR_NAME,
coll_v_AP_DISACLEANSE_FLG,
coll_v_AP_NAME_LOCK_FLG,
coll_v_AP_PREMISE_FLG
FROM
IN_EIM_ADDR_PER;
FORALL indx IN coll_v_AP_ADDR.FIRST.. coll_v_AP_ADDR.LAST
SELECT seq_dm_row_id.NEXTVAL INTO v_seq_row_id FROM DUAL;
/* for test only - more columns from will be included*/
INSERT INTO SIEBEL.EIM_ADDR_PER
(ROW_ID) VALUES (v_seq_row_id );
END;
I am new to collections and used cursors most of the time. It would be great if someone help me in solving this issue, which I am trying for looong time.
Thanks.
YarHi,
I like to get clarified, Instead of the declaring individual variables can I try some like below. Could anyone advice me on this.
TYPE in_tbl_col_type_rec IS RECORD (
ap_addr_tt IN_EIM_ADDR_PER.AP_ADDR%TYPE,
ap_addr_name_tt IN_EIM_ADDR_PER.AP_ADDR_NAME%TYPE,
ap_disc_flg_tt IN_EIM_ADDR_PER.AP_DISACLEANSE_FLG%TYPE,
ap_name_lock_flg_tt IN_EIM_ADDR_PER.AP_NAME_LOCK_FLG%TYPE,
ap_pre_flg_tt IN_EIM_ADDR_PER.AP_PREMISE_FLG%TYPE);
TYPE in_tbl_col_type_tbl IS TABLE OF in_tbl_col_type_rec
INDEX BY PLS_INTEGER;
v_in_tbl_col in_tbl_col_type_rec;
And I am trying to use,
FORALL indx IN v_in_tbl_col.FIRST.. v_in_tbl_col.LAST
which is giving the error 'component 'FIRST' must be declared'.
Thanks,
Yar -
Installing cs3 master collection and cs5 production premium on windows 7 machine
I have a windows 7 ultimate machine that I would like to install CS3 Master Collection on. I would then like to upgrade the Production Premium programs to CS5.
I have the install discs for both. Any suggestions for how to go about doing this would be greatly appreciated.
Thanks!Tahseen,
Thanks for the quick reply!
Both CS3 Master Collection and CS5 Production Premium are full installs, neither is an upgrade. I have serial numbers for both.
Machine previously had CS4 Production Premium installed on it, that has been uninstalled.
Should I install CS3 Master Collection then install CS5 Production Premium? If so, do I need to remove the CS3 versions of programs included in Production Premium before installing CS5 Production Premium?
Thanks again! -
Once more about "black" and "white" file lists.
Hello everyone!
I've got a task to find all unauthorized executables on all workstations in domain. The good point is that workstations are identical to each other (both hard and soft), bad point is that I have to find the existence of this files on HDDs, not their
launches. And I have to use SCCM 2012 SP1 for reporting as well. That's why I cannot use the AppLocker.
Well, what I've decided to do is to take one of workstations as the sample (SW - sample workstation). All updates, patches, etc. are provided at SW first, then are spread on whole domain. All .exe (and another file masks) on SW are presumed as "white",
all others on workstations are presumed as "black" ones.What I need now is to compare white-list from SW with file list from every computer in collection.
There already exists almost ready-to-use report that I need, but it has to be modified. Unfortunately, my knowledge of MS SQL is somewhere below zero (maybe absolute zero, -274C :) ). Thats,s why I'm asking for help. I've tried to find some articles about
creating or modifying reports, but most of them are the same: "Open Report Builder, now copy and paste there the sample query from below. Wonder what a pretty report you've got!"
The report is "Compare software inventory on two computers". What modifications do I need:
- Compare not "Computer name - Computer name" but "Computer name - Select a collection"
- Exclude files from white-list (from SW) from report.
- Exclude size, version and time check - only existence and (maybe) the difference in path..
- Group by machine name.
Maybe instead of ready query you can advice me some good article like "Composing reports in Report Builder for absolute newbies", I'll appreciate it very much as well.
Thank you for your time.
Sincerely, AlexeyHello, Daniel!
Thank you very much for your answer it was really helpful.
I really would like to delegate this report to programmers department but the problem is that they know nothing about SCCM, so I should explain to them what is SCCM, what is 'device collection' and all other things. Moreover, I've managed to find the list
of functions for SCCM 2012, but I didn't find the list of SQL views for it, found only for SCCM 2007 and I'm not sure that it will suit for 2012.
Well, I'm not too old yet to start learning something new :) , so I'll try to deal with this report myself.
Thank you again for your help.
Sincerely, Alexey. -
Best practices for pass collections and to navigate between 2 view endlessl
Hello, I have a doubt about efficiency and optimization of memory in this case. I have a managedBean for to show a activities´s list, then I can select one activity and the application redirects another view. This view is controlled for another managedBean for to show the specificied activity.
My idea is pass the collection and the id of specificied activity to he second managedBean, and since second managedBean pass the collection to the first managedBean.
I had thought pass properties by request and retrieve in the second bean, but I am not sure wich scope to usea in both bean. Because, the first bean pass collection to the first again.
I also thought to use SessionScope in both bean, but I doubt about efficiency of memory in this case.
How to pass parameters is not yet defined:
-Using h:link and attributes
- Using setPropertyactionListener between both bean
-Others who do not know
First managedBean (show list)
@ManagedBean(name="actividades")
@ViewScoped I'm not sure which scope to use
public class ActividadesController implements Serializable {
private static final long serialVersionUID = 1L;
private final static Logger logger=Logger.getLogger(ActividadesController.class);
private List<Actividad> listado; All activities
@ManagedProperty(value="#{actividadBO}")
private ActividadBO actividadBo;
@ManagedProperty(value="#{asociaciones}")
private AsociacionController asociacionController;
/** methods **/
Second managedBean (specified activity)
@ManagedBean(name="actV")
@ViewScoped I'm not sure which scope to use
public class ActividadView implements Serializable {
private static final long serialVersionUID = 1L;
private Actividad actividad;
private String comentario;
private List<Actividad> listado; All activities for to avoid having to search again
@ManagedProperty(value="#{actividadBO}")
private ActividadBO actividadBo;
private Integer idActividad;
@PostConstruct
public void init(){
//actividad=actividadBo.get(idActividad);
actividad=actividadBo.get(idActividad);
actualizarComentarios(actividad.getIdActividad());
actualizarAdjuntos(actividad.getIdActividad());
/** methods **/
Any suggestions??
Kind regards.Hello, I have a doubt about efficiency and optimization of memory in this case. I have a managedBean for to show a activities´s list, then I can select one activity and the application redirects another view. This view is controlled for another managedBean for to show the specificied activity.
My idea is pass the collection and the id of specificied activity to he second managedBean, and since second managedBean pass the collection to the first managedBean.
I had thought pass properties by request and retrieve in the second bean, but I am not sure wich scope to usea in both bean. Because, the first bean pass collection to the first again.
I also thought to use SessionScope in both bean, but I doubt about efficiency of memory in this case.
How to pass parameters is not yet defined:
-Using h:link and attributes
- Using setPropertyactionListener between both bean
-Others who do not know
First managedBean (show list)
@ManagedBean(name="actividades")
@ViewScoped I'm not sure which scope to use
public class ActividadesController implements Serializable {
private static final long serialVersionUID = 1L;
private final static Logger logger=Logger.getLogger(ActividadesController.class);
private List<Actividad> listado; All activities
@ManagedProperty(value="#{actividadBO}")
private ActividadBO actividadBo;
@ManagedProperty(value="#{asociaciones}")
private AsociacionController asociacionController;
/** methods **/
Second managedBean (specified activity)
@ManagedBean(name="actV")
@ViewScoped I'm not sure which scope to use
public class ActividadView implements Serializable {
private static final long serialVersionUID = 1L;
private Actividad actividad;
private String comentario;
private List<Actividad> listado; All activities for to avoid having to search again
@ManagedProperty(value="#{actividadBO}")
private ActividadBO actividadBo;
private Integer idActividad;
@PostConstruct
public void init(){
//actividad=actividadBo.get(idActividad);
actividad=actividadBo.get(idActividad);
actualizarComentarios(actividad.getIdActividad());
actualizarAdjuntos(actividad.getIdActividad());
/** methods **/
Any suggestions??
Kind regards. -
Required account rights for Alert and Performance/Topology collection and operations SDK
Hi,
My question is with regards to required user role privileges for performing certain operations using Operations Manager 2007 R2 SDK.
- Registering an internal connector to MS SCOM for alert subscription:
http://msdn.microsoft.com/en-us/library/bb437580.aspx
- Collection and acknowledging (or closing) of alerts
http://msdn.microsoft.com/en-us/library/bb424130.aspx
http://msdn.microsoft.com/en-us/library/hh327168.aspx
Based on experience and this article (http://technet.microsoft.com/en-us/library/hh212758.aspx) on how to configure a product connector subscription I'm guessing
that user account needs to have Operations Manager Administrators user role privileges, however I was unable to find this documented in context of SDK.
Are requirements the same for GetMonitoringPerformanceData and GetConfigurationGroups methods?
http://msdn.microsoft.com/en-us/library/microsoft.enterprisemanagement.monitoring.monitoringperformancedatareader.getmonitoringperformancedata.aspx
http://msdn.microsoft.com/en-us/library/dd848560.aspx
Thank you and kind regards,
ZsoltHi,
As far as I know, to close an alert the user should be at least an Operator role. Please refer to the below article to get more information about SCOM user role profiles:
Operations Associated with User Role Profiles
http://technet.microsoft.com/en-us/library/hh872885.aspx
Regards,
Yan Li
Please remember to mark the replies as answers if they help and unmark them if they provide no help. -
Book excerpt about Collections
http://java.sun.com/developer/Books/javaprogramming/javaobjects/ch06final.pdf
Nowhere in this free chapter does the author advise to declare Collections by specifying the least specialized type possible
it's always something like :
ArrayList arrayList = new ArrayList();
// using Collection methods only, like "add()"...By doing so, aren't we losing one of the most interesting aspect of Collections : designing by contract and being able to swap implementations as the needs change ?
Do you think this is irrelevant in a chapter about collections but belongs to a pure OO chapter ?
Just wondering...I've only skipped the chapter, so I might miss anything. But I'll give you my two Euro-Cents nevertheless:
- I think it should be mentioned in the chapter, even 'though that chapter obviously is not about that specific concept. More importantly the chapter should really use that paradigm throughout it's example code. I think in this case giving correct examples is much better than repeating the message again and again.
- The chapter does mention using a simple wrapper about the list to hide away the use of the concrete list implementation in favour of a more business-orientet interface (Transcript+TranscriptEntry vs. ArrayList<TranscriptEntry>). IMO that is another approach to the same "problem". -
Is there another way of getting apps from the appstore without putting your credit card number in, ive heard about the itunes gift card thing can anybody just give me more info about that and how i can buy free things free things from the appstore...pls help as im only a teenager and have no credit credit and my parents dont trust me with theres and they dont care about the fact that you can set up a password/.... PLEASE SOMEONE HELP I WILL BE SO GRATEFUL... And i would really like to get the iphone 4 but if there is no way of etting apps without your credit number then i would have to get a samsung galaxy s3 maybe ...
You can set up an Apple ID without a credit card.
Create iTunes Store account without credit card - Support - Apple - http://support.apple.com/kb/ht2534
Maybe you are looking for
-
My Apple ID account does not show my new laptop as an authorized computer
I have purchased a new computer and am trying to put my itunes / Applie ID account to recognize my new computer. I only have 2 other authorized accounts in my Apple ID. I also am trying to sync my iPod Shuffle but it won't authorize that either, wh
-
Multiple registration with sip-ua
Hi, someone know a way to do multiple registration with a single 2811 using sip-ua configuration with multiple accounts?? thnx s.
-
Is there any way to add adblock like extensions in safari on iPad other than downloading apps?
I have been looking up for adblock extensions to use in safari on iPad because of all the ads popping up while surfing the web and watching videos, It is so annoying. Do any know of any way other than downloading other apps?
-
I cannot seem to get my Keynote presentation that I export as pdf, or html, to work with iweb. I want to take the presentation I made in keynote 08 and use it on my web page I made in iweb.Should be simple....
-
In ma iPhone5s personal hotspot is not available
IIn ma I phone 5s personal hospot is not available