Oracle PL/SQL Functions
Hi Guys,
When creating procedures and functions in PL/SQL please can somebody clarify the difference in using IS and AS keywords.
Best Regards,
Shaz
You can use either 'AS' or 'IS' as you prefer.
See the PL/SQL language reference - http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#CHDBEJGF
It has examples and uses both of these. Here is one that uses IS
Example 8-3 Creating Nested Subprograms that Invoke Each Other
DECLARE
-- Declare proc1 (forward declaration):
PROCEDURE proc1(number1 NUMBER);
-- Declare and define proc 2:
PROCEDURE proc2(number2 NUMBER) IS
BEGIN
proc1(number2);
END;But this one uses AS
Example 8-17 Invoking an IR Instance Methods
-- OE creates a procedure that invokes change_job
CREATE PROCEDURE reassign
(p IN OUT NOCOPY hr.person_typ, new_job VARCHAR2) AS
BEGIN
p.change_job(new_job); -- executes with the privileges of oe
END;
-- OE grants EXECUTE to HR on procedure reassign
GRANT EXECUTE ON reassign to HR;
-- HR passes a person_typ object to the procedure reassign
DECLARE
p1 person_typ;
BEGIN
p1 := person_typ(1004, 'June Washburn', 'SALES');
oe.reassign(p1, 'CLERK'); -- current user is oe, not hr
END;
/
Similar Messages
-
In my original email I should have made the point clear that an indexed
column was required, that led to some confusion, apologies.
Under Oracle 7 even if the column is indexed the query engine still does a
full scan of the index to find the maximum or minimum value. As strange as
this seems it is possible to view it using the Oracle trace functions such
as tkprof. This method is quicker than not having an index but the cursor
method is far more efficient.
When using a cursor based approach Oracle will go straight to the first
record of the index (depending on MAX or MIN) and retrieve the data. By
exiting at that point the function has been performed and the I/O operations
are extremely low compared to a full index scan.
Of course there is a trade off depending on the amount of rows but for large
indexed tables the cursor approach will be far faster than the normal
functions. I'm not sure how other RDBMS's handle MAX/MIN but this has been
my experience with Oracle. This process may be faster still by using PL/SQL
but then you are incorporating specific database languages which is
obviously a problem if you port to a different RDBMS. Here is some code you
can try for Oracle PL/SQL functions:
declare
cursor myCur1 is
select number_field
from number_table
order by number_field desc;
begin
open myCur1;
fetch myCur1 into :max_val;
close myCur1;
end;
I hope this clarifies things a bit more. If in doubt of the execution plan
of a performance critical query use the database trace functions as they
show up all sorts of surprises. MAX and MIN are easy to understand when
viewing code but perform poorly under Oracle, whether v8 behaves differently
I have yet to discover.
Cheers,
Dylan.
-----Original Message-----
From: [email protected] [mailto:[email protected]]
Sent: Thursday, 7 January 1999 3:37
To: [email protected]
Subject: RE: SQL functions in TOOL code
I guess my point is that MAX can always be implemented more
efficiently than the SORT/ORDER-BY approach (but may not be the
case, depending on the RDBMS). If an ORDER-BY
can use an index (which means that the indexing mechanism involves
a sorted collection rather than an unordered hashtable) so can
MAX - in which case finding a MAX value could be implemented
in either O(1) or O(logn) time, depending on the implementation.
The last sentence being the major point of this whole discussion,
which is that your mileage may vary depending on the RDBMS - so
try using both approaches if performance is a problem.
In terms of maintenance, MAX is the much more intuitive approach
(In My Opinion, of course), since a programmer can tell right away
what the code is attempting to do.
Chad Stansbury
BORN Information Services, Inc.
-----Original Message-----
From: [email protected]
To: [email protected]; [email protected]; [email protected]
Sent: 1/6/99 10:45 AM
Subject: RE: SQL functions in TOOL code
Well, yes, but in that specific case (looking for max() value) would not
be
true that, if you have an index (and only then) on that specific column
some
databases (like Oracle) will be smart enough to use index and find max
value
without full table scan and without using order by clause?
Dariusz Rakowicz
Consultant
BORN Information Services (http://www.born.com)
8101 E. Prentice Ave, Suite 310
Englewood, CO 80111
303-846-8273
[email protected]
-----Original Message-----
From: Sycamore [SMTP:[email protected]]
Sent: Wednesday, January 06, 1999 10:29 AM
To: [email protected]; [email protected]
Subject: Re: SQL functions in TOOL code
If (and only if) an index exists on the exact columns in the ORDER BY
clause, some databases are smart enough to traverse the index (inforward
or
reverse order) instead of doing a table scan followed by a sort.
If there is no appropriate index, you always end up with some kind ofsort
step.
Of course this is all highly schema- and database-dependent, so youmust
weigh those factors when deciding to exploit this behavior.
Kevin Klein
Sycamore Group, LLC
Milwaukee
-----Original Message-----
From: [email protected] <[email protected]>
To: [email protected] <[email protected]>
Date: Wednesday, January 06, 1999 9:40 AM
Subject: RE: SQL functions in TOOL code
This seems a bit counter-intuitive to me... primarily due to
the fact that both MAX and ORDER-BY functionality would require
a full table scan on the given column... no? However, I would
think that a MAX can be implemented more efficiently since it
just requires the max value in a given set (which can be performed
in O(n) time on an unordered set) versus an ORDER-BY (sort)
performance on an unordered set of at best O(nlogn) time.
Am I missing something? Please set me straight on this 'un.
Chad Stansbury
BORN Information Services, Inc.
-----Original Message-----
From: Jones, Dylan
To: 'Vuong, Van'
Cc: [email protected]
Sent: 1/5/99 4:42 PM
Subject: RE: SQL functions in TOOL code
Hi Van,
Operating a function such as MAX or MIN is possible as given in your
example
but it is worth pointing out the performance overhead with such a
method.
When you use MAX, Oracle will do a full table scan of the column so
if
you
have a great many rows it is very inefficient.
In this case use a cursor based approach and depending on your
requirments
(MAX/MIN) use a descending or ascending ORDER BY clause.
eg.
begin transaction
for ( aDate : SomeDateDomain ) in
sql select DATE_FIELD
from DATE_TABLE
order by
DATE_FIELD DESC
on session MySessionSO
do
found = TRUE;
aLatestDate.SetValue(aDate);
// Only bother about the first record
exit;
end for;
end transaction;
On very large tables the performance increases with the above method
will be
considerable so it is worth considering which method to use whensizing
your
database and writing your code.
Cheers,
Dylan.
-----Original Message-----
From: Vuong, Van [mailto:[email protected]]
Sent: Tuesday, 5 January 1999 6:50
To: [email protected]
Subject: SQL functions in TOOL code
Is it possible to execute a SQL function from TOOL code?
For example:
SQL SELECT Max(Version) INTO :MyVersion
FROM Template_Design
WHERE Template_Name = :TemplateName
ON SESSION MySession;
The function in this example is MAX().
I am connected to an Oracle database.
Thanks,
Van Vuong
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive<URL:http://pinehurst.sageit.com/listarchive/>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive<URL:http://pinehurst.sageit.com/listarchive/>
>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive<URL:http://pinehurst.sageit.com/listarchive/>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/> -
Error PLS-00306 during calling PL/SQL function from Java
Hi all,
I am facing a problem during call of oracle PL/SQL function from java using CallableStatement.
I receive following error message.
java.sql.SQLException: ORA-06550: line 1, column 13:
PLS-00306: wrong number or types of arguments in call to 'EXPORT_HIST_ALARMS_FUNC'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
As per above error EXPORT_HIST_ALARMS_FUNC in oracle has this signature.
CREATE OR REPLACE FUNCTION EXPORT_HIST_ALARMS_FUNC(startDateTime VARCHAR2, endDateTime VARCHAR2, meType VARCHAR2) RETURN VARCHAR2 IS
END EXPORT_HIST_ALARMS_FUNC;
Above function I have called following way in java.
String sql = "begin ?:= EXPORT_HIST_ALARMS_FUNC(?, ?, ?); end;" ;
CallableStatement cStatement = null;
cStatement = connection.prepareCall(sql);
cStatement.registerOutParameter(1,Types.VARCHAR);
cStatement.setString(2,startDateTime);
cStatement.setString(3,endDateTime);
cStatement.setString(4,meType);
cStatement.execute();
msg = cStatement.getString(1);
Actually above function requires three input parameters and one return parameter.
During execution of above java code it throws SQLException and shows PLS-00306: wrong number or types of arguments in call to 'EXPORT_HIST_ALARMS_FUNC' error.
I have run this function directly from oracle with three parameters and run successfully and finally it returns string.
But I am unable to figure out why it doesn't run from above java code.
Please help regarding this.
Thanks.
Regards,
Shardul BankerTry this:
String sql = "begin ?:= EXPORT_HIST_ALARMS_FUNC(?, ?, ?); end;" ;
CallableStatement cStatement = null;
cStatement = connection.prepareCall(sql);
cStatement.registerOutParameter(1,Types.VARCHAR);
cStatement.setString(1,startDateTime);
cStatement.setString(2,endDateTime);
cStatement.setString(3,meType);
cStatement.execute();
msg = cStatement.getString(1);Regards,
Martijn Teigeler
Edited by: mTeigeler on Oct 13, 2007 10:22 AM -
Use T-SQL functions in ORACLE too, so you can write one script version that works in SYBASE, SQLSERVER and ORACLE when need to use the following functions:
ceiling, charindex, dateadd, datediff, datename, datepart, day, db_id, db_name, getdate, host_id, host_name, left, len, month, replicate, right, space, str, str_replace, stuff, substring, suser_id, suser_name, user_id, user_name and year.
The file [comp_tsql_ORA_schema.txt|http://forums.databasejournal.com/attachment.php?attachmentid=564&d=1258547015] creates the tablespace and schema to put the objects, and the file [comp_tsql_ORA.txt|http://forums.databasejournal.com/attachment.php?attachmentid=569&d=1259256898] creates the functions into the new schema. They will be avaliable for any schema of the oracle instance.
Hope this help!
Any suggestion please contact.
aklein2003
Edited by: user1958693 on 26/11/2009 10:16jgarry wrote:
J2EE beta released around 1999. Religious programming wars far preceded that. Here's but [one example|http://groups.google.com/group/comp.lang.lisp/browse_thread/thread/1c50bc13e9302f00/34bb8f3ac77e2388?q=programming+language+religion#34bb8f3ac77e2388] from a quick google. I'm no longer convinced that elegance is a desirable trait for a language. So call me a heretic.
Ever tried XLISP? :-)
It's different. Back then it was simply the language itself. And it was not really a religious kind of battle, but more a mine-is-bigger-and-better-than-yours one.
With Java, it is all about The Acrhitecture and the blessed language of Java. ;-)
I wouldn't so much blame J2EE believers for that. I think there is a fundamental complexity to web type paradigms that hasn't been described in a precise and encompassing enough manner to enable correct project planning.The basic problem is that the database is treated as a persistent storage layer only. A bit bucket. And that is exactly what a database is not.
But as it is used that, loads of database features now need to be duplicated in the application layer. Which is done. Very poorly.
Heck, I've even been told that J2EE's 3-tier architecture is not client server. Such ignorance is really unbelievable. Or is it pure stupidity?Until you just made me look it up, I would have thought that too, I'm sure I saw client/server defined as two-tier in the last century. But I have much more stupid misdefinitions to deal with on a daily basis, simply from the multiplicity of paradigms. I tend to retreat into my shell. Hehehe. Know that feeling... These days I rather run away, or set shields to full power, than try to get in yet another frustrating, fruitless and futile discussion with a Java head about the wonders of the J2EE architecture. Or trying to explain that this "new" architecture is predated with what we used in the 80's on mainframe systems with transaction monitors, block devices (the 80's web browsers) and databases - which software layer for software layer was almost identical to "+The Great Architecture+" of today. (and we did it without buzzwords too) ;-)
Client-server is a software architecture and in essence describes 3 basic software components. The User Interface (UI), the Application (APP) and the Database (DB). And there are various ways to put these components together in a client-server architecture. The mistake that the Java fanbois make is thinking that client-server means having the client as the UI and APP as a single component (so-called fat client) and then the DB component as the server.
There are numerous versions of these - including the APP component being a server component (as we now these days more commonly used in over the web).
My beef with the J2EE "+religion+" always has been that client-server is client-server. The fundamentals stay the same. -
Access SQL Function in Oracle?
Microsoft Access SQL has a function called LastOf which extracts
data from a column within the last row returned when multiple
rows are returned. This function works even when many tables are
joined and only one of them returns multiple rows. Does Oracle's
SQL implementation have anything like it?I can't find a reference to a LastOf function for MS-Access.
Perhaps you are refering to the Last(expr) function or MoveLast
method of DAO Recordset.
Last behavior can be reached in one of several ways depending on
the desired results, most depending on the ordering of the result
set. Both Access and VB use the concept of a recordset, which is
analogous to a CURSOR in Oracle.
To use an implicit cursor, and only retreive the one row, you
might use the sudo-colomn ROWNUM:
SELECT my_col FROM my_tab WHERE ROWNUM = 1
This would give you the first record of the result set, but there
is no guarantee on which row it would be - so you might consider
ordering the result set:
SELECT my_col FROM my_tab WHERE ROWNUM = 1 ORDER BY my_col ASC;
Which would return one row, the value of my_col being the
smallest value in the table. Now might be a good time to talk
aggrogate functions, such as:
SELECT MIN( my_col ) FROM my_tab;
which does the same thing as above.
If all else fails, RTFM.
-Kevin -
Calling a pl/sql function from oracle forms
I have written a pl/sql function in a package.
package name- sup
function name - func
I have written a when-button-pressed trigger .from here I want to call this function.
How can I do that?
Please help..Thanks a lot..
User may select 20-30 check boxes for respective name & id...then at the end , user will hit OK...from here when-button-click will call a procedure....that will update/insert/delete a table data.The procedure I have written is:-
DECLARE
N_CNT Number(1);
D_SYSDATE Constant date :=sysdate;
Begin
select count(1)
into N_CNT
from dbtable L
where L.land_id = :BLK1.LAND_ID and
L.Operatoer_id = :BLK1.Operatoer_id and
L.suppl_id = :BLK1.suppl_id and
L.suppl_prof_id = :BLK1.suppl_prof_id;
if ((N_CNT = 0) and (:LANDLISTE.state = 'A')) then
insert into dbtable
LAND_ID,
STATE,
suppl_prof_id,
suppl_id,
OPERATOER_ID,
SIDST_OPD_DATO,
SIDST_OPD_INIT
values
:BLK1.LAND_ID,
'Y',
:BLK1.suppl_prof_id,
:BLK1.suppl_id,
:BLK1.Operatoer_id,
D_SYSDATE,
:BLK1.SIDST_OPD_INIT
elseif
((N_CNT>0 )and (:LANDLISTE.state = 'A')) then
update dbtable L
set L.SIDST_OPD_DATO = D_SYSDATE,
L.SIDST_OPD_INIT = :BLK1.SIDST_OPD_INIT
where L.land_id = :BLK1.LAND_ID and
L.Operatoer_id = :BLK1.Operatoer_id and
L.suppl_id = :BLK1.suppl_id and
L.suppl_prof_id = :BLK1.suppl_prof_id;
elseif ((N_CNT>0 ) and (:LANDLISTE.state = 'D')) then
delete from dbtable L
where L.land_id = :BLK1.LAND_ID and
L.Operatoer_id = :BLK1.Operatoer_id and
L.suppl_id = :BLK1.suppl_id and
L.suppl_prof_id = :BLK1.suppl_prof_id;
end if;
end;
Will it be able to load multiple data(20-30 at a time) to the table?
Should I write anything to commit the data in the table?
I am very new to oracle forms...please help.. -
Calling PL/SQL Functions And Open Oracle Reports From ADF Application
Hi all,
My company will convert some projects from Oracle forms to Oracle ADF so, we need to call the PL/SQL functions and open the Oracle Reports (which are already exist) from ADF Application.
Thank You..
Jack.NHi Jack.N,
calling PL/SQL Functions -----> http://sameh-nassar.blogspot.com/2010/01/create-plsql-function-and-call-it-from.html
Open Oracle Reports ---------> http://radio-weblogs.com/0137094/2008/06/15.html
You will find The Integration between ADF and other systems in ---> http://wiki.oracle.com/page/ADF+Integration
Sameh Nassar -
Setting Oracle Permissions for file access from a pl/sql function
I have a pl/sql function that calls a java method which moves a
file from a directory to another.
Since we are using Linux, Oracle wants some permissions.
Those permissions are set using:
call dbms_java.grant_permission(USER, 'java.io.FilePermission',
FILE, permission)
OK, i want to use this in my pl/sql function, but it doesn't
work.
My function looks like something like this:
-- some pl/sql code
dbms_java.grant_permission(someUSER, 'java.io.FilePermission',
sourceFILE, 'write');
dbms_java.grant_permission(someUSER, 'java.io.FilePermission',
destFILE, 'write');
flag := move(sourceFILE, destFILE);
-- flag is for 1 -> done and 0 -> error
-- some more code ...
The problem is the lines of
dbms_java.grant_permission(someUSER, 'java.io.FilePermission',
sourceFILE, 'write');
do not work!
When i grant permissions manually in sql plus it works great,
but when i do it from the function it does not work!
Any ideas anyone?
Any help would be appreciated.The command :
dbms_java.grant_permission
(someUSER, 'java.io.FilePermission',sourceFILE, 'write');
is right.
Open sqlplus
Connect as sys or system
type :
execute dbms_java.grant_permission
(someUSER, 'java.io.FilePermission',sourceFILE, 'write');
commit;
try to compile again your procedure...does it work now ?
bye
Giovanni Regola -
[OT] User-Defined string Functions Oracle PL/SQL
Ladies and Gentlemen,
I am pleased to offer the following string functions Oracle PL/SQL:
GETALLWORDS(): Inserts the words from a string into the table.
GETWORDCOUNT(): Counts the words in a string.
GETWORDNUM(): Returns a specified word from a string.
OCCURS(): Returns the number of times a character expression occurs within another character expression (including overlaps).
OCCURS2(): Returns the number of times a character expression occurs within another character expression (excluding overlaps).
PADC(): Returns a string from an expression, padded with spaces or characters to a specified length on the both sides.
STRTRAN(): Searches a character expression for occurrences of a second character expression, and then replaces each occurrence with a third character expression. Unlike a built-in function Replace, STRTRAN has three additional parameters.
STRFILTER(): Removes all characters from a string except those specified.
RAT(): Returns the numeric position of the last (rightmost) occurrence of a character string within another character string (including overlaps). The search performed by RAT() is case-sensitive. RAT similar to the PL/SQL function INSTR.
ATC(): Returns the beginning numeric position of the first occurrence of a character expression within another character expression, counting from the leftmost character (including overlaps). The search performed by ATC() is case-insensitive. ATC similar to the PL/SQL function INSTR.
RATC(): Returns the numeric position of the last (rightmost) occurrence of a character string within another character string (including overlaps). The search performed by RATC() is case-insensitive. RATC similar to the PL/SQL function INSTR.
AT2(): Returns the beginning numeric position of the first occurrence of a character expression within another character expression, counting from the leftmost character (excluding overlaps). The search performed by AT2() is case-sensitive. AT2 similar to the PL/SQL function INSTR.
REPLICATE(): Returns a character string that contains a specified character expression repeated a specified number of times.
ROMANTOARAB(): Returns the number equivalent of a specified character Roman numeral expression (from I to MMMCMXCIX).
Plus, there are versions for MS SQL SERVER, SYBASE ASA, DB2, MS SQL SERVER 2005 SQLCLR.
More than 8000 people have already downloaded my functions. I hope you will find them useful as well.
For more information about string UDFs Oracle PL/SQL please visit the
http://www.universalthread.com/wconnect/wc.dll?LevelExtreme~2,54,33,29233
Please, download the file
http://www.universalthread.com/wconnect/wc.dll?LevelExtreme~2,2,29233
With the best regards.>
I am using the Oracle Data Provider in vs2012. I am having trouble calling a function that returns an object type defined.
>
Returning a collection like that is a bad idea to begin with. That isn't scaleable and wastes memory.
Either return a REF CURSOR and let the client FETCH the rows or use a PIPELINED function and let the client query it like they would a table.
Here is an example similar to yours that uses a PIPELINED function.
create or replace
package pkg2
as
CURSOR emp_cur is (SELECT empno, ename, job, mgr, deptno FROM emp);
type pkg_emp_table_type is table of emp_cur%rowtype;
function get_emp(
p_deptno number
return pkg_emp_table_type
pipelined;
end;
create or replace
package body pkg2
as
function get_emp(
p_deptno number
return pkg_emp_table_type
pipelined
is
begin
for v_emp_rec in (SELECT empno, ename, job, mgr, deptno
FROM emp where deptno = p_deptno) loop
pipe row(v_emp_rec);
end loop;
end;
end;
select * from table(pkg2.get_emp(20));
EMPNO ENAME JOB MGR DEPTNO
7369 DALLAS CLERK2 7902 20
7566 DALLAS MANAGER 7839 20
7788 DALLAS ANALYST 7566 20
7876 DALLAS CLERK 7788 20
7902 DALLAS ANALYST 7566 20 -
Using an Oracle SQL Function from JPA/TopLink
How do I get the return value from a simple (one string input parameter, returns a string) Oracle SQL Function?
Thanks!If you mean calling a stored function in Oracle, you might try something like:
ValueReadQuery vrq = new ValueReadQuery();
SQLCall call = new SQLCall("begin ###res := pkg.funcInp(#inp); end;");
vrq.setCall(call);
Query q = em.createNativeQuery(""); // we need a Query; any query would do; we replace its contents below
((EJBQuery)q).setDatabaseQuery(vrq);
q.setParameter("inp", "paramValue");
String result = (String)q.getSingleResult();
// #=input; ###=output; ####=input/output;
// if you want to explicitly specify the type of an output parameter, use #### instead of ###,
// because pure "output" parameters are always treated as java.lang.StringThis will only work in TopLink Essentials, though. I don't know how to do it in Hibernate. I have dealt mainly with TopLink, and just a little with Hibernate.
In my opinion, it's a HUGE omission not to have support for stored procedures in JPA. Virtually every project I have worked on (in two large companies) has consisted of a large portion of code in stored procedures (sometimes as much as 50% of the overall code). It's a pain to have to go through all that trouble to call the stored procedures.
Also, pay special attention to TopLink's shared L2 cache. If a stored procedure changes something in the database, TopLink won't know about it and chances are that you will end up with stale objects in the cache which you will either have to refresh, or you'd have to invalidate TopLink's cache for these objects.
Best regards,
Bisser -
Oracle sql function to find VARCHAR2 data is numeric
Hi Everyone,
Is there oracle sql function to find whether the VARCHAR2 data is numeric?
Thankshi,
see the below example .
with t as
(select '12' as col from dual union all
select '1 2' as col from dual union all
select '2 1 3' as col from dual union all
select 'abcde' as col from dual union all
select '12345' as col from dual union all
select '1a4A5' as col from dual union all
select '12a45' as col from dual union all
select '12aBC' as col from dual union all
select '12abc' as col from dual union all
select '12ab5' as col from dual union all
select '12aa5' as col from dual union all
select '12AB5' as col from dual union all
select 'ABCDE' as col from dual union all
select '123-5' as col from dual union all
select '12.45' as col from dual union all
select '1a4b5' as col from dual union all
select '1 3 5' as col from dual union all
select '1 45' as col from dual union all
select '1 5' as col from dual union all
select 'a b c d' as col from dual union all
select 'a b c d e' as col from dual union all
select 'a e' as col from dual union all
select 'Steven' as col from dual union all
select 'Stephen' as col from dual union all
select '111.222.3333' as col from dual union all
select '222.333.4444' as col from dual union all
select '333.444.5555' as col from dual union all
select 'abcdefabcdefabcxyz' as col from dual union all
select 'aaa' as col from dual union all
select 'ddd' as col from dual union all
select 'ccc' as col from dual union all
select 'aaaaa' as col from dual union all
select 'aaaaaaaa' as col from dual
select * from t where regexp_like(col,'[1-9]')
Result
COL
12
1 2
2 1 3
12345
1a4A5
12a45
12aBC
12abc
12ab5
12aa5
12AB5
123-5
12.45
1a4b5
1 3 5
1 45
1 5
111.222.3333
222.333.4444
333.444.5555Thanks,
P Prakash -
How can i migrate Power Builder 8.0 Function into oracle PL/SQL
Hi Oracle Experts...
How can i migrate Power Builder 8.0 Function into oracle PL/SQL.. I had migrate some of the coding from PB to PL/SQL. But i don't know how can i convert PB structure(here structure is a data type) into oracle PL/SQL.
Instead of structure what is the equivalent in oracle plsql
Below i pasted my POWER BUILDER FUNCTION:
Long ll_perd,ll_lnperd,ll_mon,ll_effmon,ll_instno,ll_odno
Decimal{5} ldl_actual,ldl_diff,ldl_inst
Datetime ldt_first,ldt_exp,ldt_oddt, ldt_lastprod
String ls_instmode,ls_inst
str_batch lstr_od //Structure to store odamt and oddate
Select pay_c_final,lon_d_expiry, lon_d_lastprod
Into :ls_inst,:ldt_exp, :ldt_lastprod
From loan_mast
Where branch_c_code = :gs_branch and
act_c_type = :as_actype and
act_c_no = :as_acno;
If Sqlca.Sqlcode = -1 Then
f_message('FT-0189',Sqlca.Sqlerrtext)
lstr_od.batchslno = -1
Return lstr_od
End If
If adt_prodt > ldt_exp Then
Select Ceil(months_between(:adt_prodt,:ldt_exp)) Into :lstr_od.batchslno From dual;
lstr_od.cheqdt = ldt_exp
lstr_od.batchslno = DaysAfter(Date(ldt_lastprod), Date(adt_prodt))
Else
If ls_inst = 'N' Then
If adt_prodt > ldt_exp Then
Select Ceil(months_between(:adt_prodt,:ldt_exp)) Into :lstr_od.batchslno From dual;
lstr_od.cheqdt = ldt_exp
Else
lstr_od.batchslno = 1
End If
ElseIf ls_inst = 'Y' Then
Select first_d_due,lon_c_instperd,lon_n_perd
Into :ldt_first,:ls_instmode,:ll_lnperd
From loan_mast
Where branch_c_code = :gs_branch and
act_c_type = :as_actype and
act_c_no = :as_acno;
If Sqlca.Sqlcode = -1 Then
f_message('FT-0189',Sqlca.Sqlerrtext)
lstr_od.batchslno = -1
Return lstr_od // Return Structure
End If
Select Ceil(months_between(:adt_prodt,:ldt_first)) Into :ll_mon from dual;
If ll_mon > 0 Then
Select Nvl(ln_n_balance,0),Nvl(ln_n_instlamt,0),Nvl(ln_n_instlno,0)
Into :ldl_actual,:ldl_inst,:ll_instno
From loan_inst_sch
Where act_c_type = :as_actype and
act_c_no = :as_acno and
ln_d_effdate = (Select Max(ln_d_effdate)
From loan_inst_sch
Where act_c_type = :as_actype and
act_c_no = :as_acno and
ln_d_effdate < :adt_prodt);
If Sqlca.Sqlcode = -1 Then
f_message('FT-0224', Sqlca.Sqlerrtext)
lstr_od.batchslno = -1
Return lstr_od
ElseIf Sqlca.Sqlcode = 100 Then
lstr_od.batchslno = 1
* Return lstr_od*
End If
If adl_bal > ldl_actual Then
If ldl_inst > 0 Then
lstr_od.batchslno = (adl_bal - ldl_actual) / ldl_inst
End If
Else
lstr_od.batchslno = 1
End If
If lstr_od.batchslno = 0 Then lstr_od.batchslno = 1
//For full OD
If ll_mon > ll_lnperd Then
lstr_od.batchslno = (ll_mon - ll_lnperd) + lstr_od.batchslno
End If
If ls_instmode = 'Q' Then
lstr_od.batchslno = lstr_od.batchslno * 3
ElseIf ls_instmode = 'H' Then
lstr_od.batchslno = lstr_od.batchslno * 6
ElseIf ls_instmode = 'Y' Then
lstr_od.batchslno = lstr_od.batchslno * 12
End If
Select :adt_prodt - :lstr_od.batchslno Into :lstr_od.cheqdt From dual;
If ls_instmode = 'M' Then
ll_odno = ll_instno - lstr_od.batchslno // To get OD Date
Select ln_d_effdate
Into :lstr_od.cheqdt
From loan_inst_sch
Where act_c_type = :as_actype and
act_c_no = :as_acno and
ln_n_instlno = :ll_odno;
If Sqlca.Sqlcode = -1 Then
f_message('FT-0224', + Sqlca.Sqlerrtext)
lstr_od.batchslno = -1
Return lstr_od
End If
End If
Else
lstr_od.batchslno = 1
End If
End If
End if
Return lstr_od
Thanks in adance
Arun M MWhat are you going to return the structure to? What I would normally use here if the code was going to be used by other PL/SQL would be a PL/SQL object type.
However, if PowerBuilder is still in the equation (you're moving the logic to PL/SQL but keeping PowerBuilder for the GUI ), then you'll have to return something else, because PowerBuilder doesn't understand PL/SQL object types. Perhaps passing a REF CURSOR as a OUT argument and populating it from the procedure. PowerBuilder could then retrieve the result of the procedure using a stored procedure based DataWindow. -
Oracle PL/SQL procedure/function to post message into weblogic jms queue
Hi All,
Is it possible to post messages to weblogic JMS queue from pl/sql procedure/function?
From this Queue, message will be read by OSB interface.
Any help will be highly appreciated.
Regards,
Steve904640 wrote:
Hi All,
Is it possible to post messages to weblogic JMS queue from pl/sql procedure/function?
From this Queue, message will be read by OSB interface.
Any help will be highly appreciated.
http://www.lmgtfy.com/?q=oracle+pl/sql+weblogic+jms+queue -
Error while trying to call external web service from oracle PL/SQL 10.2 g
Hi I am trying to call an external web service from oracle PL/SQL .I am getting following run time error when I try to set the opeartion style.
But as per the oracle documentation this is one of the 2 valid values.
ORA-29532: Java call terminated by uncaught Java exception: operation style: "document" not supported.Teh webservice does expect the operation style as document.
Following is the code I am executing.
FUNCTION email
return varchar2
AS
service_ SYS.utl_dbws.SERVICE;
call_ SYS.utl_dbws.CALL;
service_qname SYS.utl_dbws.QNAME;
port_qname SYS.utl_dbws.QNAME;
operation_qname SYS.utl_dbws.QNAME;
string_type_qname SYS.utl_dbws.QNAME;
retx ANYDATA;
retx_string VARCHAR2(1000);
retx_double number;
retx_len number;
params SYS.utl_dbws.ANYDATA_LIST;
l_input_params SYS.utl_dbws.anydata_list;
l_result ANYDATA;
l_namespace VARCHAR2(1000);
begin
-- open internet explorer and navigate to http://webservices.imacination.com/distance/Distance.jws?wsdl
-- search for 'targetNamespace' in the wsdl
l_namespace := 'http://service.xmlservices.global.freedomgroup.com/';
-- search for 'service name' in the wsdl
service_qname := SYS.utl_dbws.to_qname(l_namespace, 'ClientCoreWebServiceBeanService');
-- this is just the actual wsdl url
service_ := SYS.utl_dbws.create_service(HTTPURITYPE('http://hostname/GlobalWebServices/services/ClientCoreWebService?wsdl'), service_qname);
-- search for 'portType name' in the wsdl
port_qname := SYS.utl_dbws.to_qname(l_namespace, 'ClientCoreWebServiceBeanPort');
-- search for 'operation name' in the wsdl
-- there will be a lot, we will choose 'getCity'
operation_qname := SYS.utl_dbws.to_qname(l_namespace, 'postalCodelookup');
-- bind things together
call_ := SYS.utl_dbws.create_call(service_, port_qname, operation_qname);
-- default is 'FALSE', so we make it 'TRUE'
SYS.utl_dbws.set_property(call_, 'SOAPACTION_USE', 'TRUE');
-- search for 'operation soapAction' under <wsdl:operation name="getCity">
-- it is blank, so we make it ''
SYS.utl_dbws.set_property(call_, 'SOAPACTION_URI', '');
-- search for 'encodingstyle' under <wsdl:operation name="getCity">
SYS.utl_dbws.set_property(call_, 'ENCODINGSTYLE_URI', 'http://schemas.xmlsoap.org/soap/encoding/');
-- search for 'binding style'
SYS.utl_dbws.set_property(call_, 'OPERATION_STYLE', 'DOCUMENT');
-- search for 'xmlns:xs' to know the value of the first parameter
-- under <wsdl:message name="getCityResponse"> you will see the line <wsdl:part name="getCityReturn" type="xsd:string" />
-- thus the return type is 'string", removing 'xsd:'
string_type_qname := SYS.utl_dbws.to_qname('http://www.w3.org/2001/XMLSchema', 'string');
-- in the line <wsdl:operation name="getCity" parameterOrder="zip">
-- the parameterOrder is 'zip', thus we put in 'zip'
-- the 'ParameterMode.IN' is used to specify that we will be passing an "In Parameter" to the web service
-- the 'ParameterMode.IN' is a constant variable in the sys.utl_dbws package
--vj this cud be either params or xml
SYS.utl_dbws.add_parameter(call_, 'param1', string_type_qname, 'ParameterMode.IN');
SYS.utl_dbws.add_parameter(call_, 'param2', string_type_qname, 'ParameterMode.IN');
SYS.utl_dbws.set_return_type(call_, string_type_qname);
-- supply the In Parameter for the web service
params(0) := ANYDATA.convertvarchar('<TFGGlobalBasicXMLDO><systemCd>GLOBAL</systemCd><username>GlobalAdmin</username><password>GlobalAdmin</password><localID>1</localID></TFGGlobalBasicXMLDO>');
params(1) := ANYDATA.convertvarchar('<TFGGlobalPostalCodeLookupIDDO><postalCode>02446</postalCode><countryCode>USA</countryCode><stateCode>MA</stateCode><cityDisplay>BROOKLINE</cityDisplay><countyDisplay>NORFOLK</countyDisplay><include_inactive_flag>True</include_inactive_flag></TFGGlobalPostalCodeLookupIDDO>');
-- invoke the web service
retx := SYS.utl_dbws.invoke(call_, params);
dbms_output.put_line(retx.gettypename);
-- access the returned value and output it to the screen
retx_string := retx.accessvarchar2;
dbms_output.put_line('done' || retx_string);
dbms_output.put_line('PL/SQL DII client return ===> ' || retx_string);
-- release the web service call
SYS.utl_dbws.release_service(service_);
return retx_string;
end email;thsi is urgent anybody ????
-
Application Report Missing PL/SQL Functional Area
All,
I just wanted to bring to the ApEx developers something I just noticed... I use the Shared Components > Database Object Dependencies report to make sure all is well before moving applications into production.
The Parsing Errors feature of that report is WONDERFUL! But it seems to be overlooking buttons that use a conditional display based on PL/SQL Function Body Returning a Boolean.
DanHi Dan,
I think the place is perfect, but I read once somewhere that "Bug" or "Bug Report" should be in the subject so that's easier to find for the Oracle guys.
Patrick
My APEX Blog: http://inside-apex.blogspot.com
The ApexLib Framework: http://apexlib.sourceforge.net
The APEX Builder Plugin: http://sourceforge.net/projects/apexplugin/
Maybe you are looking for
-
I have been having frequent ABENDs on NW 6.5 server running appacke2. I applied SP8 in hopes of solving it, but after applying SP8 I got an ABEND yesterday that involving apache2 again. Can anyone tell me what appears to be causing this. See the atta
-
Error while installing the SAP J2EE add-on for SAP NW XI installation
Error while installing the SAP J2EE add-on for SAP NW XI installation Posted: Jan 24, 2007 5:23 PM Reply E-mail this post Hello, When I am installing the SAP SAP J2EE add-on for SAP NW XI installation I am getting the follwing error:
-
Value does not fall within the expected range while passing a spfieldlookupvalue in a caml QUERY
i have to pass a column from master list -single line of text - and this will be the lookup of another column in another list splist1---> column1 [ free text] splist2--> column2 [ lookup column of the above list -splist1] now am writing a caml quer
-
How to transfer favourites from Internet Explorer to firefox
When I ask this question, I get referred to the answer for transferring from Outlook Express - which is no answer!
-
activation error on the ipad