How to implement a vector in PL/SQL?
I have a very simple question. I would like to implement
a vector like data[i][j] in PL/SQL. What is the best way to do this?
Thanks in advance.
Look here:
http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96624/05_colls.htm#1059
Rgds.
Similar Messages
-
How to implement email facility in PL/SQL programs.
Is there any Oracle package which supports email facility?
I have some dbms automatic jobs fires every half hour, in case there is any failure in the process I would like to send an email to user or the person who is running the job.
Can some body tell me how to implement it in PL/SQL?????????????You might find this article useful..
visit..
http://www.oracle.com/oramag/code/tips2000/090400.html -
How to implement optemistic locking in pl/sql for oracle database
i have search the net to find example of how i can do the optimistic locking in pl/sql, all the resources i found were old , for example "Optimistic Locking with Concurrence in Oracle.
As " by Graham Thornton Snr. Database Architect / Oracle DBA in 2001, but at the end he said that the approach will not work fine if the update being made is a relative update, this apprach includes:-
1.add a timestamp column to an exsiting table.
2.add a preinsert trigger on the table to set the timestamp.
3.add a preupdate trigger to comapre the old time stamp with the new one.
So where i can find updated resources about this issue.
Edited by: 812643 on 17-Nov-2010 12:39totally plagiarized from expert oracle database architecture 9i, 10g, 11g by Tom Kyte pg201
one popular implementation of optimistic locking is to keep the old and new values in the application and upon updating the data use and update like this
update table
set column1 =: new_column1, column2 = : new_column2, ...
where primary_key = :primary_key
and decode( column1, :old_column1, 1 ) = 1
and decode( column2, :old_column2, 1 ) = 1
another implementation
optimistic locking using a version column
add a single column to each database table you wish to protect from lost updates. this column is generally either a number or date/timestamp column
It is typically maintened via a row trigger on the table, which is responsible for incrementing the number column or updating the date/timestamp column
every time a row is modified.
another one on page 204
optimistic locking usin a checksum
similiar to the version column implementation but it uses the base data itself to compute a virtual version column.
the ones suggested where owa_opt_lock.checksum, dbms_obfuscation_toolkit.md5, dbms_crypto.hash, ora_hashEdited by: pollywog on Nov 17, 2010 3:48 PM
might be a good book for you to look into getting it has a whole chapter on locking and latching.
Edited by: pollywog on Nov 17, 2010 3:54 PM -
How to implement multi threading in pl/sql
Hi,
I have to run a pl/sql procedure which calls multiple instances of another procedure of some other package.
How should I proceed to do it?
Bhaskar.Actually the final table that need to be updated has
millions of records.
Hence I am thinking of multithreading.1) Why are you updating millions of records? Frequently, it is more efficient to do a direct path insert of the final data from a staging table into the final table rather than trying to update millions of rows in place.
2) Are you using parallel DML? SQL already provides the ability to enable parallelism if that is going to improve the performance of your queries. There is, in general, no need to re-implement that in PL/SQL.
And all the information are communicated within the
same session.I'm not sure I understand what you're saying here...
Justin -
How to implement Dynamic Sort to an SQL classic report?
Hi,
I'm trying to implement dynamic sort to my working sql classic report, when user selects order by column from select item(action as submit page), the report should be refreshed and display with the selected column sort order.
But not able to do so.
Report Query:
Select a, b, c from sample order by :P1_ORDER_BY
P1_ORDER_BY - Select Item:
STATIC2: Column 1;a, Column 2;b, Column 3;c
Running page, report doesnt sorts in any of the column priority.
Kindly guide.
Regards,
KrishnaOf course the select item is in use.
It should submit the the page on select so you can retrieve the current value in you report select statement.
look here:
http://apex.oracle.com/pls/apex/f?p=21296:2:
table:
create table sample
a varchar2(30)
, b varchar2(30)
, c varchar2(30)
insert into sample values('a','z','k');
insert into sample values('b','y','d');
insert into sample values('c','x','a');
insert into sample values('d','w','b');
commit;
Select List:
P2_ORDER_BY
STATIC:Order by A;A,Order by B;B,Order by C;C
Report select:
select
a,b,c
from sample
order by
decode(:P2_ORDER_BY,'A',a,null)
, decode(:P2_ORDER_BY,'B',b,null)
, decode(:P2_ORDER_BY,'C',c,null)Marc
Edited by: telemat on Aug 24, 2012 1:50 PM -
How to implement dynamic sql in owb
Hi everybody,
I am new to OWB and hence i want to know how i can implement the following dynamic sql statement in owb...
Declare
Cursor C_tab_col is
Select cat from tbl_cat_edesc_1 ;
Vcat varchar2(240);
Cursor C_edesc_col is
Select edesc from tbl_cat_edesc_1 ;
Vedesc varchar2(240);
V_Command varchar2(30000);
Begin
Open C_Tab_col;
Fetch C_tab_col into vcat;
Open C_edesc_col;
Fetch C_edesc_col into vedesc;
loop
V_Command := 'update upd_catseg_1 c set c.'||vcat||'=';
V_Command := V_Command||'(select d.sales from TEST_catseg d' ;
V_Command := V_Command||' where edesc = '||''''||vedesc||''''||' and c.cardno=d.cardno)';
dbms_output.put_line('10 '||V_command);
Execute immediate v_command;
Fetch C_tab_col into vcat;
Exit when c_tab_col%notfound;
Fetch C_edesc_col into vedesc;
Exit when c_edesc_col%notfound;
end loop;
commit;
end;
Thanks a manyHi,
first i have created a procedure witht he following code in the code editor...
BEGIN
Declare
Cursor C_brand_col is
Select cat from TBL_CAT_EDESC_BRAND ;
Vbrand varchar2(240);
Cursor C_bredesc_col is
Select EDESC_BRAND from TBL_CAT_EDESC_BRAND;
Vbredesc varchar2(240);
V_Command varchar2(30000);
Begin
Open C_brand_col;
Fetch C_brand_col into vbrand;
Open C_bredesc_col;
Fetch C_bredesc_col into vbredesc;
loop
V_Command := 'update sav_fc_sa_pc c set c.'||vbrand||'=';
V_Command := V_Command||'(select d.fc_brands_sa from TEST_brand d' ;
V_Command := V_Command||' where d.brand_edesc = '||''''||vbredesc||''''||' and c.cardno=d.cardno)';
dbms_output.put_line('10 '||V_command);
Execute immediate v_command;
Fetch C_brand_col into vbrand;
Exit when c_brand_col%notfound;
Fetch C_bredesc_col into vbredesc;
Exit when c_bredesc_col%notfound;
end loop;
commit;
end;
END;
then i validate it and deply it..
after that i create a mapping and in that mapping i first import the table TBL_CAT_EDESC_BRAND and drag and drop it into the mapping and again the i put the procedure into a transformation operator and connect the inoutgrp of the table to the transformation operator ingrp deploy it and run it...this is taking a lot of time .... so i am not sure whether i am doing the right thing...for this dynamic sql i dont need to pass any parameters. can i juz execute this procedure or should i create a mapping ???? i am totally confused... could you please help me.....how to proceed........
if i juz execute the dynamic sql it takes only 5 min in sql but i am not sure how ti implement it in owb... can you please help...
Thanks a many -
How usable is it to implement big Matrices in PL/SQL?
Hi there,
I'm implementing neural network Algorithms with Gradient Descend Methods in PL/SQL. The time for running the Algorithm (Backpropagation of Error) is very large - I still did my best for more Efficiency.
Now I'm thinking about implementing another Algorithm which is called 'Levenberg Marquardt' and that is said to be much more faster. But this Algorithm handles with very large Matrices, invertes and transposes them, needs to create a Jacobian Matrix -> has a big demand for memory
could anyone tell me how efficient it is to implement things like that in PL/SQL? Is there any use in trying it? Perhaps anybody who still worked with something like this?
Thanks in advance
~MelWell it's certainly possible in PL/SQL if that's the way you want to implement it...
SQL> ed
Wrote file afiedt.buf
1 declare
2 type t_x is table of number index by pls_integer;
3 type t_y is table of t_x index by pls_integer;
4 v_xy t_y;
5 begin
6 for y in 1..700
7 loop
8 for x in 1..700
9 loop
10 v_xy(y)(x) := ((y-1)*700)+x;
11 end loop;
12 end loop;
13 dbms_output.put_line('y size: '||v_xy.count);
14 dbms_output.put_line('(123,567) = '||v_xy(123)(567));
15 dbms_output.put_line('(700,700) = '||v_xy(700)(700));
16* end;
SQL> /
y size: 700
(123,567) = 85967
(700,700) = 490000
PL/SQL procedure successfully completed.
SQL> -
How to pass a structure in PL/SQL external proc.
This is for educational purpose only. I am trying to implement kernel32.dll and shell32.dll in PL/SQL using external proc. Everything is working fine, except When there is a structure in OUT parameter.
My database version.
SQL> SELECT * FROM v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - ProductionI have set up the listner.ora and tnsnames.ora and written a package called dbms_kernel32sb.
There are 9 program units.
1. CreateFile -- working fine
2. CloseFile -- working fine
3. GetSize -- working fine
4. FindFirstFile -- NOT working, because one OUT parameter has the structure type WIN32_FIND_DATA.
5. GetFileTime -- NOT working, because one OUT parameter has the structure type FILETIME
6. GetDiskFreeSpace -- working fine
7. GetDriveType -- working fine.
8. GetLastError -- working fine
9. ExecuteCommand -- working fine.
Here is the package specification:
CREATE OR REPLACE PACKAGE dbms_kernel32sb AS
Name: dbms_kernel32sb.pks
Author: Saubhik Banerjee
Date: 24th Jan 2011
Version: 1.0
Comment: This package is to implement some functionality from kernel32.dll.
Usng extproc
OPEN_EXISTING_FILE CONSTANT PLS_INTEGER :=3;
FILE_ATTRIBUTE_NORMAL CONSTANT PLS_INTEGER :=128;
DISABLE_FILE_SHARE_MODE CONSTANT PLS_INTEGER :=0;
NO_FILE_SECURITY_ATTRIBUTE CONSTANT PLS_INTEGER :=0;
NO_TEMPLATE_FILE CONSTANT PLS_INTEGER :=0;
GENERIC_FILE_ACCESS CONSTANT PLS_INTEGER :=0;
FILE_SIZE_HIGH CONSTANT PLS_INTEGER :=400000000;
EXECUTE_FILE CONSTANT VARCHAR2(4):='open';
PRINT_FILE CONSTANT VARCHAR2(5):='print';
NO_PARAMATER CONSTANT VARCHAR2(2):=' ';
FUNCTION CreateFile(pi_FileName VARCHAR2 --1, File name
,pi_DesiredAccess BINARY_INTEGER --2, Type of access required (read/write ect)
,pi_ShareMode BINARY_INTEGER --3, share mode
,pi_SecurityAttributes BINARY_INTEGER --4, securoty attribute
,pi_CreationDisposition BINARY_INTEGER --5, open existing, create new etc
,pi_FlagsAndAttributes BINARY_INTEGER --6, File attribute- normal
,pi_TemplateFile BINARY_INTEGER) --Not required.
Return BINARY_INTEGER;
FUNCTION CloseFile (pi_FileHandle BINARY_INTEGER)
Return BINARY_INTEGER;
FUNCTION GetSize (pi_FileHandle BINARY_INTEGER,
pio_FileSizeHigh IN OUT BINARY_INTEGER)
RETURN BINARY_INTEGER;
FUNCTION FindFirstFile ( pi_FileName VARCHAR2
,pio_Win32_Find_data OUT
WIN32_FIND_DATA
RETURN BINARY_INTEGER;
FUNCTION GetFileTime ( pi_FileHandle BINARY_INTEGER
,pio_FileCreationTime IN OUT FILETIME
,pio_LastAccessTime IN OUT FILETIME
,pio_LastWriteTime IN OUT FILETIME
RETURN BINARY_INTEGER;
FUNCTION GetDiskFreeSpace ( pi_RootPathName VARCHAR2
,pio_SectorsPerCluster OUT BINARY_INTEGER
,pio_BytesPerSector OUT BINARY_INTEGER
,pio_NumberOfFreeClusters OUT BINARY_INTEGER
,pio_TotalNumberOfClusters OUT BINARY_INTEGER
RETURN BINARY_INTEGER;
FUNCTION GetDriveType( pi_driveLetter VARCHAR2) RETURN VARCHAR2;
FUNCTION GetLastError RETURN BINARY_INTEGER;
FUNCTION ExecuteCommand ( pi_OperationType VARCHAR2
,pi_FileName VARCHAR2
,pi_Parameters VARCHAR2
,pi_DefaultDirectory VARCHAR2
RETURN VARCHAR2;
END dbms_kernel32sb;
Here is the package body:
CREATE OR REPLACE PACKAGE BODY dbms_kernel32sb AS
/* Name: dbms_kernel32sb.pkb
Author: Saubhik Banerjee
Date: 24th Jan 2011
Version: 1.0
Comment: This package is to implement some functionality from kernel32.dll.
Usng extproc
FUNCTION
CreateFile( pi_FileName VARCHAR2 --1
, pi_DesiredAccess BINARY_INTEGER --2
, pi_ShareMode BINARY_INTEGER --3
, pi_SecurityAttributes BINARY_INTEGER --4
, pi_CreationDisposition BINARY_INTEGER --5
, pi_FlagsAndAttributes BINARY_INTEGER --6
, pi_TemplateFile BINARY_INTEGER) --7
Return BINARY_INTEGER IS EXTERNAL LIBRARY kernel32 Name "CreateFileA"
PARAMETERS( pi_FileName STRING
, pi_DesiredAccess long
, pi_ShareMode long
, pi_SecurityAttributes long
, pi_CreationDisposition long
, pi_FlagsAndAttributes long
, pi_TemplateFile long
, return long);
FUNCTION CloseFile (pi_FileHandle BINARY_INTEGER)
Return BINARY_INTEGER
IS EXTERNAL
LIBRARY kernel32 Name "CloseHandle"
PARAMETERS (pi_FileHandle long, return long);
FUNCTION GetSize (pi_FileHandle BINARY_INTEGER,
pio_FileSizeHigh IN OUT BINARY_INTEGER)
RETURN BINARY_INTEGER
IS EXTERNAL
LIBRARY kernel32 NAME "GetFileSize"
PARAMETERS (pi_FileHandle long, pio_FileSizeHigh long, return long );
FUNCTION GetFileTime ( pi_FileHandle BINARY_INTEGER
,pio_FileCreationTime IN OUT FILETIME
,pio_LastAccessTime IN OUT FILETIME
,pio_LastWriteTime IN OUT FILETIME
RETURN BINARY_INTEGER
IS EXTERNAL
LIBRARY kernel32 NAME "GetFileTime"
WITH CONTEXT
PARAMETERS ( CONTEXT,
pi_FileHandle long
, pio_FileCreationTime OCIColl
, pio_FileCreationTime INDICATOR SHORT
, pio_LastAccessTime OCIColl
, pio_LastAccessTime INDICATOR SHORT
, pio_LastWriteTime OCIColl
, pio_LastWriteTime INDICATOR SHORT
, return long );
FUNCTION FindFirstFile ( pi_FileName VARCHAR2
,pio_Win32_Find_data OUT
WIN32_FIND_DATA
RETURN BINARY_INTEGER
IS EXTERNAL
LIBRARY kernel32 NAME "FindFirstFileA"
--WITH CONTEXT
PARAMETERS
( --CONTEXT,
pi_FileName STRING--, pi_FileName INDICATOR SHORT
, pio_Win32_Find_data BY REFERENCE OCIColl--,pio_Win32_Find_data INDICATOR long
, return long );
FUNCTION GetDiskFreeSpace ( pi_RootPathName VARCHAR2
,pio_SectorsPerCluster OUT BINARY_INTEGER
,pio_BytesPerSector OUT BINARY_INTEGER
,pio_NumberOfFreeClusters OUT BINARY_INTEGER
,pio_TotalNumberOfClusters OUT BINARY_INTEGER
RETURN BINARY_INTEGER
IS EXTERNAL
LIBRARY kernel32 NAME "GetDiskFreeSpaceA"
PARAMETERS ( pi_RootPathName STRING
, pio_SectorsPerCluster BY REFERENCE long
, pio_BytesPerSector BY REFERENCE long
, pio_NumberOfFreeClusters BY REFERENCE long
, pio_TotalNumberOfClusters BY REFERENCE long
, return long );
FUNCTION GetDriveTypeA( pi_driveLetter VARCHAR2) RETURN BINARY_INTEGER
IS EXTERNAL
LIBRARY kernel32 NAME "GetDriveTypeA"
PARAMETERS (pi_driveLetter STRING, RETURN long);
FUNCTION GetDriveType( pi_driveLetter VARCHAR2) RETURN VARCHAR2 IS
BEGIN
CASE GetDriveTypeA(pi_driveLetter)
WHEN 2 THEN RETURN 'Removable';
WHEN 3 THEN RETURN 'Drive Fixed';
WHEN 4 THEN RETURN 'Remote';
WHEN 5 THEN RETURN 'Cd-Rom';
WHEN 6 THEN RETURN 'Ram disk';
ELSE RETURN 'Unrecognized';
END CASE;
END;
FUNCTION GetLastError RETURN BINARY_INTEGER
IS EXTERNAL
LIBRARY kernel32 NAME "GetLastError"
PARAMETERS (return long);
FUNCTION ShellExecute( pi_Hwnd BINARY_INTEGER
,pi_Operation VARCHAR2
,pi_FileName VARCHAR2
,pi_Parameters VARCHAR2
,pi_DefaultDirectory VARCHAR2
,pi_ShowCmd BINARY_INTEGER
) RETURN BINARY_INTEGER
IS EXTERNAL
LIBRARY SHELL32 NAME "ShellExecuteA"
PARAMETERS (pi_Hwnd long,pi_Operation STRING,pi_FileName STRING
,pi_Parameters STRING,pi_DefaultDirectory STRING
,pi_ShowCmd long, return long
FUNCTION ExecuteCommand ( pi_OperationType VARCHAR2
,pi_FileName VARCHAR2
,pi_Parameters VARCHAR2
,pi_DefaultDirectory VARCHAR2
RETURN VARCHAR2 IS
v_return_val BINARY_INTEGER;
BEGIN
v_return_val:= ShellExecute(0,pi_OperationType
,pi_FileName,pi_Parameters
,pi_DefaultDirectory,0
IF v_return_val <=32 THEN
RETURN 'Error!';
ELSE RETURN 'Success!';
END IF;
END;
END dbms_kernel32sb;
Now the working demos:
SQL> SET SERVEROUT ON
SQL> /* Demo I:- How to obtain file size */
SQL> DECLARE
2 v_FileSize BINARY_INTEGER;
3 v_FileSizeHigh PLS_INTEGER;
4 v_FileHandle BINARY_INTEGER;
5 v_filename VARCHAR2(500) :='C:\test2.csv';
6 v_dummy BINARY_INTEGER;
7 BEGIN
8 v_FileSizeHigh := DBMS_KERNEL32SB.FILE_SIZE_HIGH;
9 v_FileHandle:=DBMS_KERNEL32SB.CreateFile(v_filename -- File name
10 ,DBMS_KERNEL32SB.GENERIC_FILE_ACCESS
11 ,DBMS_KERNEL32SB.DISABLE_FILE_SHARE_MODE
12 ,DBMS_KERNEL32SB.NO_FILE_SECURITY_ATTRIBUT
13 ,DBMS_KERNEL32SB.OPEN_EXISTING_FILE
14 ,DBMS_KERNEL32SB.FILE_ATTRIBUTE_NORMAL
15 ,DBMS_KERNEL32SB.NO_TEMPLATE_FILE);
16 v_FileSize := DBMS_KERNEL32SB.Getsize(v_FileHandle, v_FileSizeHigh)
17 DBMS_OUTPUT.put_line('File Size in Bytes: ' ||v_FileSize);
18 v_dummy:=DBMS_KERNEL32SB.CloseFile(v_FileHandle);
19 END;
20 /
File Size in Bytes: 61
PL/SQL procedure successfully completed.
SQL>
SQL> /* Demo II:- How to find free disk space */
SQL> DECLARE
2 v_rootpath VARCHAR2(500) :='C:\';
3 v_dummy BINARY_INTEGER;
4 v_sectorspercluster BINARY_INTEGER;
5 v_bytespersector BINARY_INTEGER;
6 v_numberoffreeclusters BINARY_INTEGER;
7 v_totalnumberofclusters BINARY_INTEGER;
8 v_freespace NUMBER;
9 v_totalspace NUMBER;
10 BEGIN
11 v_dummy:=DBMS_KERNEL32SB.GetDiskFreeSpace(v_rootpath
12 ,v_sectorspercluster
13 ,v_bytespersector
14 ,v_numberoffreeclusters
15 ,v_totalnumberofclusters
16 );
17
18 DBMS_OUTPUT.put_line('Sector pre Cluster: ' ||v_sectorspercluster);
19 DBMS_OUTPUT.put_line('Bytes per sector: ' ||v_bytespersector);
20 DBMS_OUTPUT.put_line('Number Of Free Clusters: ' ||v_numberoffreeclusters);
21 DBMS_OUTPUT.put_line('Total Number Of Clusters: ' ||v_totalnumberofclusters);
22 v_freespace:=v_numberoffreeclusters/1024/1024/1024;
23 v_freespace:=ROUND(v_freespace*v_sectorspercluster*v_bytespersector,3);
24 v_totalspace:=v_totalnumberofclusters/1024/1024/1024;
25 v_totalspace:=ROUND(v_totalspace*v_sectorspercluster*v_bytespersector,3);
26 DBMS_OUTPUT.put_line('Total Space (GB):' ||v_totalspace);
27 DBMS_OUTPUT.put_line('Total number of Free space (GB): '||v_freespace );
28 END;
29 /
Sector pre Cluster: 8
Bytes per sector: 512
Number Of Free Clusters: 739477
Total Number Of Clusters: 9765622
Total Space (GB):37.253
Total number of Free space (GB): 2.821
PL/SQL procedure successfully completed.
SQL>
SQL> /* Demo IV:- How to get drive type*/
SQL> SELECT dbms_kernel32sb.GetDriveType('C:\') FROM dual;
DBMS_KERNEL32SB.GETDRIVETYPE('C:\')
Drive Fixed
SQL> SELECT dbms_kernel32sb.GetDriveType('D:\') FROM dual;
DBMS_KERNEL32SB.GETDRIVETYPE('D:\')
Cd-Rom
SQL> SELECT dbms_kernel32sb.GetDriveType('E:\') FROM dual;
DBMS_KERNEL32SB.GETDRIVETYPE('E:\')
Unrecognized
SQL>
SQL> /* Demo V:- How to execute an Operating System Command*/
SQL> DECLARE
2 v_FileToExecute VARCHAR2(20):='test.bat';
3 v_Parameter VARCHAR2(20):='test1.csv';--dbms_kernel32sb.NO_PARAMATER
4 v_DefaultDirectory VARCHAR2(20):='C:\';
5 v_ReturnValue VARCHAR2(20);
6 BEGIN
7 v_ReturnValue:=dbms_kernel32sb.ExecuteCommand(dbms_kernel32sb.EXECUTE_FILE
8 ,v_FileToExecute
9 ,v_Parameter
10 ,v_DefaultDirectory
11 );
12 DBMS_OUTPUT.put_line('Status: '||v_ReturnValue);
13 END;
14 /
Status: Success!
PL/SQL procedure successfully completed.
SQL> Now the sub programs with structures are NOT getting called successfully.
SQL> /* Demo III:- How to obtain file time */
SQL> DECLARE
2 v_FileHandle BINARY_INTEGER;
3 v_filename VARCHAR2(500) :='C:\test2.csv';
4 v_dummy BINARY_INTEGER;
5 v_filecreationtime FILETIME;
6 v_lastaccesstime FILETIME;
7 v_lastwritetime FILETIME;
8 v_err BINARY_INTEGER;
9 BEGIN
10 v_FileHandle:=DBMS_KERNEL32SB.CreateFile(v_filename -- File name
11 ,DBMS_KERNEL32SB.GENERIC_FILE_ACCESS
12 ,DBMS_KERNEL32SB.DISABLE_FILE_SHARE_MODE
13 ,DBMS_KERNEL32SB.NO_FILE_SECURITY_ATTRIBUTE
14 ,DBMS_KERNEL32SB.OPEN_EXISTING_FILE
15 ,DBMS_KERNEL32SB.FILE_ATTRIBUTE_NORMAL
16 ,DBMS_KERNEL32SB.NO_TEMPLATE_FILE);
17 v_dummy := DBMS_KERNEL32SB.GetFileTime( v_FileHandle
18 ,v_filecreationtime
19 ,v_lastaccesstime
20 ,v_lastwritetime
21 );
22 v_err:=DBMS_KERNEL32SB.GetLastError;
23 DBMS_OUTPUT.put_line('File Size in Bytes: ' ||v_dummy);
24 DBMS_OUTPUT.put_line('Error:'||v_err);
25 v_dummy:=DBMS_KERNEL32SB.CloseFile(v_FileHandle);
26 END;
27 /
File Size in Bytes: 0
Error:203
PL/SQL procedure successfully completed.
SQL> So, I have noticed that, Where ever a STRUCTURE is involved in external routine, there is a problem. I want to know, How to implement functions with STRUCTURE as OUT parameter.
Forgot to mention: This is my FILETIME object which corresponds to FILETIME structure of win32.
CREATE OR REPLACE TYPE FILETIME_rec IS OBJECT
( LowDateTime NUMBER
,HighDateTime NUMBER
CREATE OR REPLACE TYPE FILETIME IS TABLE OF FILETIME_rec;Edited by: Saubhik on Feb 1, 2011 4:15 PMSaubhik wrote:
This is for educational purpose only. I am trying to implement kernel32.dll and shell32.dll in PL/SQL using external proc. Interesting. Familiar with the Wn32 API, but do not run Oracle on Windows and never looked at this aspect of integration.
So, I have noticed that, Where ever a STRUCTURE is involved in external routine, there is a problem. I want to know, How to implement functions with STRUCTURE as OUT parameter.
Forgot to mention: This is my FILETIME object which corresponds to FILETIME structure of win32.The problem is that this passes the parameter by reference and not value. In a vanilla C/C++/Delphi program, you will create a variable of that struct and then pass a long pointer to that variable when making the API call. That pointer will be dereferenced and the memory it points to, populated. This is not a problem as the underlying DLL you call that does this, uses your process's data segment.
Extproc is different. In order to protect the integrity of the database server process, an external call is done by a "proxy" process. It acts as the interface between your PL/SQL code and the actual external call.
In this case, this "proxy" process will be doing the implicit LoadLibrary() call to load kernel32.dll interface - and the DLL will expect to dereference and access this process's memory struct to populate it. This "proxy" process in turn needs to know that despite it calling the interface by reference, it needs to return that parameter to PL/SQL by value - as your PL/SQL code cannot dereference a pointer passed back by that "proxy" process and access its memory to gain access to that struct.
In basic terms - that argument is a 32 bit number containing a pointer. That is what the "proxy" process needs to pass to the interface call. Your code is passing a struct and not a pointer, right?
And that is the basic problem I believe. How to address this.. not sure. You can have your own DLL as interface that does not use pointers but expect arguments to be passed by value. But this will suck as you then need to include a custom DLL to deploy and have PL/SQL call that, instead of simply accessing and calling the native kernel interface.
Doubt that many Win32 programmers with OCI (Oracle Call Interface) frequents this forum. So perhaps this is not the best place to ask. I would be hitting Metalink (support.oracle.com) search function in your sho3s though as there should be support notes dealing with this subject matter. -
How to implement remote blob storage in SharePoint 2013
How to implement remote blob storage in SharePoint 2013
Try below:
http://blogs.technet.com/b/wbaer/archive/2013/05/23/deploying-remote-blob-storage-with-sql-server-2012-alwayson-availability-groups.aspx
If this helped you resolve your issue, please mark it Answered. You can reach me through http://itfreesupport.com/ -
How to implement this complex logic on rpd
How to implement following sql logic on OBIEE 10g RPD...whole thing to be implemented as single column on presentation layer.
to calculate numerator===
select sum(flag) as ap_account_no,exp from
(select a.invoice_id as invid,a.payment_no, max(a.payment_dt) as payment_dt,max(a.due_dt) as due_dt,b.expenditure_type as exp,
case when max(a.due_dt)+ 3 > max(a.payment_dt)
then 1
else 0
end As Flag
from Supplier_inv_pymt_map a, po_invoice_map b
where a.invoice_id= b.invoice_id and a.invoice_dt!=a.due_dt and a.usd_gross_AMOUNT >0 and a.PAYMENT_STATUS!='VOIDED' and to_char(a.payment_dt,'MON-YYYY')='JUN-2011'
group by a.invoice_id, a.payment_no,b.expenditure_type) GROUP BY exp
to calculate denominator===
select count(invid),exp from
(select a.invoice_id as invid,a.payment_no, max(a.payment_dt) as payment_dt,max(a.due_dt) as due_dt, b.expenditure_type as exp
from Supplier_inv_pymt_map a, po_invoice_map b
where a.invoice_id= b.invoice_id and a.invoice_dt!=a.due_dt and a.usd_gross_AMOUNT >0 and a.PAYMENT_STATUS!='VOIDED' and to_char(a.payment_dt,'MON-YYYY')='JUN-2011'
group by a.invoice_id, a.payment_no,b.expenditure_type) GROUP BY exp
tables n column used in sql r available on physical layer....
can anyone helpHi
if you don't want to aggregate try to define a user function
analytic_sum($(value))
implémented by
sum($(value))
after that
replace your
sum(NOTICES) over ( partition by property order by RELAVANTDATE range between interval '30' day preceding and current row)
by
analytic_sum(NOTICES) over ( partition by property order by RELAVANTDATE range between interval '30' day preceding and current row) -
How to implement this? please help
In my java class, I have a string array called strarray which hold serveral elements, some of the elements have the same value , for example, the first element is "swimming", the forth element is also swimming. I use a for loop to get each element and give it to arrayHolder which is also a array with the same size as strarray. Now, what I want is: I defined a Vector called element I want this vector to filter out the element from arrayHolder, get the name of non-duplicated name from the arrayHolder, the result should be inside the element vector (swimming,walking,running,dancing), no duplicated name. My code is like follows:
import java.util.*;
import java.io.*;
public class arrayTest{
public static void main(String arg[]){
String[] strarray={"swimming","running","walking","swimming","dancing","running"};
String[] arrayHolder=new String[strarray.size];
Vector element=new Vector();
for(int i=0;i<strarray.length();i++){
arrayHolder[ i ]=strarray[ i ];
/* What should I do next to get the non-duplicated element from arrayHolder and
* add them into the element vector????
I did not finnish it, since I am a little bit confused, how to implement? Need some help. thanks.
Message was edited by:
MellonNot sure if I see the use of strArray & arrayHolder (I've not looked at your code - you might use code tags next time (check the "code" button above the message textarea), but may I suggest using a Map of some sort instead of a Vector? It will prevent duplicates for you.
Good Luck
lee -
How to implement Dynamic lookup in OWB mappings(10g)
Hi,
Iam using OWB 10g version for developing the mappings.
Now I need to implement the Dynamic lookup in the mapping.Is there any transformations available in OWB to achieve this.
Please give me some information about the same.
Thanks in advance...Hi,
first i have created a procedure witht he following code in the code editor...
BEGIN
Declare
Cursor C_brand_col is
Select cat from TBL_CAT_EDESC_BRAND ;
Vbrand varchar2(240);
Cursor C_bredesc_col is
Select EDESC_BRAND from TBL_CAT_EDESC_BRAND;
Vbredesc varchar2(240);
V_Command varchar2(30000);
Begin
Open C_brand_col;
Fetch C_brand_col into vbrand;
Open C_bredesc_col;
Fetch C_bredesc_col into vbredesc;
loop
V_Command := 'update sav_fc_sa_pc c set c.'||vbrand||'=';
V_Command := V_Command||'(select d.fc_brands_sa from TEST_brand d' ;
V_Command := V_Command||' where d.brand_edesc = '||''''||vbredesc||''''||' and c.cardno=d.cardno)';
dbms_output.put_line('10 '||V_command);
Execute immediate v_command;
Fetch C_brand_col into vbrand;
Exit when c_brand_col%notfound;
Fetch C_bredesc_col into vbredesc;
Exit when c_bredesc_col%notfound;
end loop;
commit;
end;
END;
then i validate it and deply it..
after that i create a mapping and in that mapping i first import the table TBL_CAT_EDESC_BRAND and drag and drop it into the mapping and again the i put the procedure into a transformation operator and connect the inoutgrp of the table to the transformation operator ingrp deploy it and run it...this is taking a lot of time .... so i am not sure whether i am doing the right thing...for this dynamic sql i dont need to pass any parameters. can i juz execute this procedure or should i create a mapping ???? i am totally confused... could you please help me.....how to proceed........
if i juz execute the dynamic sql it takes only 5 min in sql but i am not sure how ti implement it in owb... can you please help...
Thanks a many -
Let me know how to Implement Drill throughs in the NW verdion
Hi,
I am doing BPC migration project from MS7 to NW7.5.
There are some Drill throughs are developed in the MS version,And there is no URL in the MS fro this.They stored the data in a table in the backend (SQL)
Let me know how to Implement Drill throughs in the NW verdion.
Thanks and Regards
KrishnaHi Krishna,
Please go through the below link on Drill through in 7.5 NW version.
http://www.sdn.sap.com/ae28bbe7-899e-4896-8237-f58cc79b34b2/finaldownload/downloadid-e804b270e3c40376a7951c8ed8930e16/ae28bbe7-899e-4896-8237-f58cc79b34b2/irj/scn/go/portal/prtroot/docs/library/uuid/10a56b21-04b9-2d10-a6b7-e0f8732b4142?quicklink=index&overridelayout=true
Hope it helps.
Regards,
Raghu -
How to implement createInstanceFromResultSet
Hi All,
I need some example to implement createInstanceFromResultSet
my requirement is to Pull a another column in query reult from another table linked using xref.
currently its doing using POST-QUERY of forms 6i.
I tried created a VO based on two EO or SQL - Query but but are taking long time as sql query itself take a long time to show result.
POST-Query
select video_seller_id into temp_video from cm_sub_seller_xref where subscriber_id = :cm_subscribers.subscriber_id and video_seller_id is not null;
if temp_video is not null then
select ext_sys_seller_reference, name into :cm_subscribers.video_seller, :cm_subscribers.video_seller_description from cm_sellers where seller_id = temp_video;
VO Query that takes time
select cm_sub_seller_xref.VIDEO_SELLER_ID, cm_sellers.EXT_SYS_SELLER_REFERENCE, cm_sellers.NAME,cm_subscribers.subscriber_id
from cm_subscribers INNER JOIN cm_sub_seller_xref on cm_sub_seller_xref.SUBSCRIBER_ID=cm_subscribers.SUBSCRIBER_ID
INNER JOIN cm_sellers on cm_sellers.SELLER_ID= cm_sub_seller_xref.VIDEO_SELLER_ID
and rownum<100
Now looking to implement same using createInstanceFromResultSetwe use Forms Developer in Post-Query:
select dept.dept_name
into :EMP.nb_dept_name
from department dept
where dept.dept_id = :EMP.dept_id;
so, How to implement ADF createInstanceFromResultSet method? -
How to implement the Oracle Group by function in Crystal reports?
Hi all,
In SQL, for example we have a group function like:
select district,state, country, continent, sum(no.of people) from world.
Now, How to implement this group function in crystal reports? Please advise.
Thanks in advance..
Regards,
sriramHi Vinay,
Thanks for the prompt reply.
In one of our report, we are supposed to perform group by for 14 columns to get sum of 3 columns and there by displaying 17 columns in the report.
When we tried in crystal reports to implement this oracle group by functionality:
1. We created 14 groups from the Insert->Group option.
2. By performing this, we got 14 group sections vertically(one inside the other).
3. Then we created the sum(15th column),sum(16th column), sum(17th column) by Insert->Summary option.
4. We suppresed all the group sections except for the last group.
5. Then, dragged all the groups to the last group section along with the summary fields.
This is how, we tried to acheive the oracle group by function in Crystal reports.
Please advise, whether our approach is right. If not, please suggest the appropriate approach with a bit detailed explanation.
Thanks,
Sriram.
Maybe you are looking for
-
Mail: new message window blocks the Mail program
Hello, When you write a new mail, the new nice interface makes the window of the new mail appear as it did on the iPad. However, this does not allow you to use the Mail program for other uses: for instance, I used to open the new mail window, and con
-
How to Move a file from one Directory to another directory.
Hi All i am having a Java standlone Application reqiurements are 1---->Connection pool To be Created. 2---->Using Thread to read Multiple Files Simulatneously. 3----->After Reading Those file I have to Move it to another folder. Plz help me.If possib
-
Problem with HP Color LaserJet 2840
Hey guys, first post here woot woot haha Now to business I have a macbook with osx 10.4.11, and an HP Color LaserJet 2840. I can't get it to print through USB. This guy on the HP forum had the exact same problem http://forums13.itrc.hp.com/service/fo
-
I just ran into a problem with javac, this code compiles fine in jdeveloper 10.1.3 but doesn't compile with the javac task in Ant 1.6.5 Compiling these 2 lines Properties props = new Properties(); Set<String> keySet2 = props.keySet(); results in this
-
Hey all, as the new Adobe Reader X should be released by the end of the month I would like to ask, if someone knows if the Unix/Linux-Version is released at the same time as the Windows version? Thanks for any answer! Regards