PL/SQL with GOTOXY function
Hi all
new to PL/SQL wonder got anyway to create gotoxy function like C
thkx in adv
PL/SQL is a procedural language. It does not use GO TO or other navigational tricks. It uses FUNCTION and PROCEDURE to build repeatable code units; and FOR...LOOP, WHILE...LOOP, IF...ELSIF...ELSE...END IF and (in 9i) CASE to control logic flow.
This link will take you to a helpful page for beginners some of us have set up. This is maintained by volunteers and not by Oracle. It contains links to commonly-asked PL/SQL questions. More pertinent in your case, it also links to the Oracle online documentation. I suggest you read the PL/SQL Application Developer's Guide before you go any further.
Re: How to attach a java bean in forms6i
Good luck, APC
Similar Messages
-
Tuning sql with analytic function
Dear friends I've developed one sql :
with REP as
(select /*+ MATERIALIZE */ branch_code,
row_number() over(partition by branch_code, account order by bkg_date desc ) R,
account,
bkg_date,
lcy_closing_bal
from history t
select REP1.branch_code,
REP1.account,
REP1.bkg_date,
REP1.lcy_closing_bal,
NULL AS second,
REP2.bkg_date bkg_date2,
REP2.lcy_closing_bal lcy_closing_bal2,
NULL AS third,
REP3.bkg_date bkg_date3,
REP3.lcy_closing_bal lcy_closing_bal3
from (SELECT * FROM REP WHERE R=1) REP1, (SELECT * FROM REP WHERE R=2) REP2, (SELECT * FROM REP WHERE R=3) REP3
where
(REP1.BRANCH_CODE = REP2.BRANCH_CODE(+) AND REP1.ACCOUNT = REP2.ACCOUNT(+)) AND
(REP1.BRANCH_CODE = REP3.BRANCH_CODE(+) AND REP1.ACCOUNT = REP3.ACCOUNT(+))The point is I want to restrict (tune) REP before it used ,because , as you can see I need maximum three value from REP (where R=1,R=2,R=3) . Which analytic function and with wich options I have to use to receive only 3 values in each branch_code,account groups at the materializing time ?Radrigez wrote:
Dear friends I've developed one sql :
with REP as
from (SELECT * FROM REP WHERE R=1) REP1,
(SELECT * FROM REP WHERE R=2) REP2,
(SELECT * FROM REP WHERE R=3) REP3
where
(REP1.BRANCH_CODE = REP2.BRANCH_CODE(+) AND REP1.ACCOUNT = REP2.ACCOUNT(+)) AND
(REP1.BRANCH_CODE = REP3.BRANCH_CODE(+) AND REP1.ACCOUNT = REP3.ACCOUNT(+))
The first step is to put your subquery (which doesn't need to be materialized) into an inline view and restrict the result set on r in (1,2,3) as suggested by thtsang - you don't need to query the same result set three times.
Then you're looking at a simple pivot operation (assuming the number of rows you want per branch and account is fixed). If you're on 11g search the manuals for PIVOT, on earlier versions you can do this with a decode() or case() operator.
Step 1 (which could go into another factored subquery) would be something like:
select
branch_code, account,
case r = 1 then bkg_date end bkg_date,
case r = 1 then lcy_closing_bal end lcy_closing_bal,
case r = 2 then bkg_date end bkg_date2,
case r = 2 then lcy_closing_bal end lcy_closing_bal2,
case r = 3 then bkg_date end bkg_date3,
case r = 3 then lcy_closing_bal end lcy_closing_bal3
from
repThis gives you the eight necessary columns, but still (up to) three rows per branch/account.
Then you aggregate this (call it rep1) on branch and account.
select
branch_code, account,
max(bkg_date),
max(lcy_closing_bal),
max(bkg_date2),
max(lcy_closing_bal2),
max(bkg_date3),
max(lcy_closing_bal3)
from
rep1
group by
branch_code, account
order by
branch_code, accountRegards
Jonathan Lewis
http://jonathanlewis.wordpress.com
Author: <b><em>Oracle Core</em></b> -
OBIEE: Incorrect SQL - with count function uses ORDER BY instead GROUP BY
I made a basic report that is a client count; I want to know how many clients the company have.
But, when I run this report, OBIEE generates a ORDER BY sentence, instead a GROUP BY. Remember that I'm using count function, that is a agregation.
The SQL generated was:
select 'N0' as c1,
count(*) as c2
from
(select distinct T1416.CLIENT_INTER_KEY as c1
from
(select *
from prd.D_SERVICE where SOURCE_SYS in ('ARBOR','PPB') and DW_SERV_ST_ID in (100000003,100000009)) T1836,
(select *
from prd.D_CLIENT) T1416,
(select *
from prd.D_CUSTOMER_ACCOUNT where SOURCE_SYS In ('ARBOR','PPB')) T1515
where ( T1416.DW_CLIENT_ID = T1515.DW_CLIENT_ID and T1515.DW_CUST_ACCT_ID = T1836.DW_CUST_ACCT_ID and T1836.MSISDN = '917330340' )
) D1
order by c1
The error that I receive is:
"Query Status: Query Failed: [nQSError: 16001] ODBC error state: S1000 code: -1005018 message: [Sybase][ODBC Driver][Adaptive Server Anywhere]Illegal ORDER BY item Order Item: 'N0',
-- (opt_OrderBy.cxx 429) .
[nQSError: 16011] ODBC error occurred while executing SQLExtendedFetch to retrieve the results of a SQL statement."
If I substitute ORDER BY with GROUP BY and test it in Sybase, Ithe query runs without any problem.
select 'N0' as c1,
count(*) as c2
from
(select distinct T1416.CLIENT_INTER_KEY as c1
from
(select *
from prd.D_SERVICE where SOURCE_SYS in ('ARBOR','PPB') and DW_SERV_ST_ID in (100000003,100000009)) T1836,
(select *
from prd.D_CLIENT) T1416,
(select *
from prd.D_CUSTOMER_ACCOUNT where SOURCE_SYS In ('ARBOR','PPB')) T1515
where ( T1416.DW_CLIENT_ID = T1515.DW_CLIENT_ID and T1515.DW_CUST_ACCT_ID = T1836.DW_CUST_ACCT_ID and T1836.MSISDN = '917330340' )
) D1
group by c1
Do you know why OBIEE generates this SQL??? Why uses, with a aggregation function, a ORDER BY and not a GROUP BY? How can I resolve this problem???
Regards,
Susana FigueiredoVerify your repository design and make sure that you have defined count aggregate on fact column. You would also need to define the content level of each dimension in fact table.
-
We have an external procedure running fine on 8.1.7 on VMS. After compiling and linking succesfully under 10.1.0, I get ORA-06521 PL/SQL: Error mapping function and ORA-06522: ERROR - vms_dlsym for file x, where x in the filename of the linked executable. Another external procedure that does not connect to the 10.1.0 database runs fine. What could be causing this error in Server 10.1.0 on VMS?
Thanks,
DaveHere is the code to create the function:
CREATE OR REPLACE FUNCTION f1
(h_file_name IN VARCHAR2)
RETURN BINARY_INTEGER
IS EXTERNAL
LIBRARY l1
NAME "f1"
LANGUAGE C
WITH CONTEXT
PARAMETERS
(CONTEST,
h_file_name string);
Here is the beginning of the Pro*C:
int f1(epctx, h_file_name)
OCIExtProcContext *epctx;
char h_file_name[70];
char h_line_txt [251];
int lineno;
FILE *fptr;
/* register the connection context ... */
EXEC SQL REGISTER CONNECT USING :epctx;
The function loads a flat file into the database. It is probably not related but are unable to SQLPLUS/ or SQLLDR/ into the database from an OS autheniticated account (get ORA-12547: TNS:lost contact.) Thanks for taking the time to look at this. There aren't many people trying this on VMS, I'd bet. -
Error while replacing IF statements with DECODE function in procedure
Hi All,
I have created a procedure which has nested IF statements. Now I want to replace the IF statements with DECODE functions to improve performance.
Procedure:
IF (var_int_sev = '0')
THEN
var_sev := '2';
ELSE
SELECT sev
INTO var_int_sev
FROM errorconfig
WHERE errorcode = var_errorcode;
var_sev := var_int_sev;
END IF;
I converted the above IF statement into DECODE function as mentioned below:
var_Sev := DECODE(var_int_sev,0,2,SELECT severity FROM errorconfig WHERE errorcode=var_ErrorCode)
But it throws below error at the select statement used inside DECODE.
Error(58,51): PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ( - + case mod new not null others <an identifier> <a double-quoted delimited-identifier> <a bind variable> avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date <a string literal with character set specification> <a number> <a single-quoted SQL string> pipe <an alternatively-quoted string literal with character set specification> <an alternativ
Can someone help me in converting the IF to DECODE in the above case. Also how can we use a select statement inside decode.instead of trying to rewrite all your code and hoping that the performance will be better, it's a better option to investigate and find out which part of your application is slow
read this:
When your query takes too long ... -
What's wrong with this function
What's wrong with this Function(PL/SQL) in this formaula column definition in Reports 6i
function currdateFormula return Date is
curr_date date;
begin
select to_char(sysdate, 'DD-MM-YYYY') into curr_date from dual;
return(curr_date);
end;
I get the following error in compiling
REP-1401. 'currdateformula'.Fatal PL/SQL error occured. ORA-01843 not a valid month.
The SQL select to_char(sysdate, 'DD-MM-YYYY') from dual; worked well in SQL Plus prompt.
I got a clean compile when i use just sysdate in the function (see below).
function currdateFormula return Date is
curr_date date;
begin
select sysdate into curr_date from dual;
return(curr_date);
end;
Appreciate your help
Raja Lakshmihello,
what you are trying to do :
fetch the current date and return it as the result of the formula-column.
what you are actually doing :
fetch the current date, convert it to text, assign this text to a date-variable which causes an implicit type-conversion.
in your case you create a date-string with the format dd-mm-yyyy. the implicit conversion then tries to convert this string back to date using the NLS settings of your session. depending on your NLS_LANG and NLS_DATE_FORMAT this might work, if your session-date-format is dd-mm-yyyy which obviously it is NOT as you get the error.
what you should do :
select sysdate into curr_date from dual;
this fetches the sysdate and stores it in your date-variable. there is no type conversion needed what so ever.
regards,
the oracle reports team -
Oracle Version: 10g
Operating System: Microsoft windows 2003
Hello, I need some help, I would appriciate if anyone could help me out.
on one hand, I have a table that contains a list of table names that are sensitive in my org.
In addition, not all the columns in the table are sensitive, some tables have only one or tow sensitive columns
on the other hand, I have another table that contains all the SQL Statements that passed through all my DB's in the org + some other details like username, machine name etc.
the sql statement is one columns - varchar2(4000). ALL the SQL TEXT is printed there.
I need to create a report of the SQL Statements and their details that have any reference to the sensitive entities.
I'm kind of new to PL/SQL or programming in DB in general.
Can you please assist me in designing the write function and script.
Additional details:
Sensitive_tables table:
table_name varchar2 (65) -- the names of the sensitive tables
All_fields number (1) -- 0=not all the fields are sensitive, 1=all the fields are sensitive
the conditions where the function should return true:
1. It's not a select/SELECT statement.
2. There is a relation to a sensitive table that all its columns are sensitive
3. There is a relation to a sensitive table and to a specific sensitive column.
below is the function.
There are 2 cursors - the first loop will check if the SQL Statement touches a sensitive column + a sensitive table.
The second one checks if the the SQL Statement a table that all its columns are sensitive.
CREATE OR REPLACE function sens_entity_match (p_statement varchar2)
return VARCHAR2
IS
v_match VARCHAR2(5);
sql_stmt VARCHAR2(4000);
TYPE tbls_wth_all_flds IS REF CURSOR;
tbls_all_fields tbls_wth_all_flds;
table_name_y varchar2(65);
TYPE tbls_wthout_all_flds IS REF CURSOR;
tbls_some_fields tbls_wthout_all_flds;
table_name_n varchar2(65);
BEGIN
sql_stmt:=upper(p_statement);
OPEN tbls_all_fields FOR select table_name from sens_tables where ALL_FIELDS='1';
OPEN tbls_some_fields FOR select table_name from sens_tables where ALL_FIELDS='0';
FETCH tbls_all_fields INTO table_name_y;
FETCH tbls_some_fields INTO table_name_n;
WHILE tbls_some_fields%FOUND LOOP
BEGIN
IF upper (sql_stmt) like 'SELECT%' THEN
BEGIN
RETURN ('FALSE');
v_match:='FALSE';
END;
ELSIF
( ((sql_stmt LIKE '%ID_NUMBER%' ) OR (sql_stmt LIKE '%id_number%' )) AND (sql_stmt LIKE table_name_n) )
OR
( ((sql_stmt LIKE '%ADDRESS%') OR (sql_stmt LIKE '%address%')) AND (sql_stmt LIKE table_name_n) )
OR
( (((sql_stmt LIKE '%EMAIL%') OR (sql_stmt LIKE '%E_MAIL%')) OR (sql_stmt LIKE '%email%') OR (sql_stmt LIKE '%e_mail%') ) AND (sql_stmt LIKE table_name_n) )
OR
(( (sql_stmt LIKE '%BANK%') or (sql_stmt LIKE '%bank%')) AND (sql_stmt LIKE table_name_n) )
OR
( ((sql_stmt LIKE '%PYM%') OR (sql_stmt LIKE '%PYM%')) AND (sql_stmt LIKE table_name_n) )
OR
( ((sql_stmt LIKE '%CREDIT_CARD%') OR (sql_stmt LIKE '%credit_card%')) AND (sql_stmt LIKE table_name_n) )
OR
( ( (sql_stmt LIKE '%USER%') OR (sql_stmt LIKE '%user%') )AND (sql_stmt LIKE table_name_n) )
OR
( ((sql_stmt LIKE '%CHURN%') OR (sql_stmt LIKE '%churn%') ) AND (sql_stmt LIKE table_name_n) )
OR
( ((sql_stmt LIKE '%LEGAL%') OR (sql_stmt LIKE '%legal%') ) AND (sql_stmt LIKE table_name_n) )
THEN
BEGIN
v_match:='TRUE';
RETURN ('TRUE');
END;
ELSE
v_match:='FALSE';
END IF;
FETCH tbls_some_fields INTO table_name_n;
END;
END LOOP;
WHILE tbls_all_fields%FOUND LOOP
BEGIN
IF upper (sql_stmt) like 'SELECT%' THEN
BEGIN
v_match:='FALSE';
RETURN ('FALSE');
END;
ELSIF (sql_stmt LIKE table_name_y) THEN
BEGIN
v_match:='TRUE';
RETURN ('TRUE');
END;
ELSE
BEGIN
v_match:='FALSE';
RETURN ('FALSE');
END;
END IF;
FETCH tbls_all_fields INTO table_name_y;
END;
END LOOP;
RETURN (v_match);
END;
Eexampls that should should be true:
select sens_entity_match ('update address_data set "EMAIL" = :24 where rowid= :old_rowid') from dual;
{address_data is a sensitive_table that exists in "sensitive_tables" table and email is a sensitive column}
select sens_entity_match ('isnert into legal (ssss) select bbbb from input where rowid = 666;') from dual;
{legal is a sensitive_table that exists in "sensitive_tables" table and all its columns are sensitive}
An example that shouldn't should be true:
select sens_entity_match ('select bank from bank_details where bank_id= 11;') from dual;
{The SQL text is a select statement}
The function complies and works, but it doesn't catch all the SQL Statements that are relevant.
How can I improve it?
What should I change?
I would appriricate any help.
Thanks,
Roni.Hi user611218!
If I understud right, then you want to have some kind of auditing. I suggest if want auditing than you should use the auditing capabilities of Oracle (Standard auditing and Fine Grained Auditing). It's much easier to generate a report from an Auditingtrail than to create a "Self-Made-Function".
But if you prefer the soluting with your function then you should change the following:
ELSIF( ((sql_stmt LIKE '%ID_NUMBER%' ) OR (sql_stmt LIKE '%id_number%' )) AND (sql_stmt LIKE table_name_n) )
CHANGE IT TO
ELSIF ((INSTR(LOWER(sql_stmt), 'id_number') > 0)) AND (INSTR(LOWER(sql_stmt), LOWER(table_name_n))))
Change all the LIKE ... Statements to INSTR ... like above.
Hope this helps! -
SQL query or function...
Hi everyone,
Please help me to clarify this question
I have a "patient" table and a "address" table.And each patient has differnt types of addresses
like PMI,Mailing and default address i need to pick patient address in the order of preference
(PMI,Mailing ,Default)
I have two options to get the address of a patient.Either write a SQL query to get the address of a
patient(according to preference)
or write a function which checks
if there is PMI,Mailing and default
take PMI
or
If there is mailing and Default
take mailing
or
take default.
which one is the best method to get the address of a patient? SQL query or function..
Definitely everyone will say that it should be direct SQL query instead of multiple function calls.
But in my organization there are many developers which will get "patient address" in their application
or SQL code or PL/SQL code or from some
'X' Business intelligence tool.
At this scenario is it best to have a function which every one will call and get a standardized output
for every one.
Question:
In my scenario which one is the best to have "SQL query or function"?
if i choose "function" i have to sacrifice the performance
if i choose "SQL query" i am not sure whether each and every developer querying the same way as it would be
Sorry if it is a dumb question to ask.
Thanks in advance
phaniquestion for hoek: what if i have to choose between SQL query and function? (suppose they dont accept to create a view)If views are not accepted (which is very strange imo), but you do need some 'standard object' which everybody can use, then you'd choose to use a function instead of everybody having 'their own query'.
It's a trade-off between maintaining standards and performance (calling PL/SQL from SQL is usually to be avoided due to context-switching, the other way around is OK).
One advantage of a view: no hassle with parameters you have to enter but never will use, you just pick the columns you need and there you go.
Other one: it's straightforward, simple and clear.
It's easier to maintain.
But it all depends on what your function will return.
Perhaps a REF CURSOR?
Your question reminds me of this interesting discussion:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:672724700346558185
Edited by: hoek on Jul 1, 2009 4:39 PM tyop's -
ORA-06521: PL/SQL: Error mapping function
Hi folks,
I am trying to run gather_table_stats for a particular table but am getting the below error. Any ideas?
SQL> execute DBMS_STATS.gather_table_stats( ownname=>'DBO',tabname=>'CD_JOURNAL_CHANGE_REG',method_opt=>'FOR ALL INDEXED COLUMNS',cascade=>TRUE);
BEGIN DBMS_STATS.gather_table_stats( ownname=>'DBO',tabname=>'CD_JOURNAL_CHANGE_REG',method_opt=>'FOR ALL INDEXED COLUMNS',cascade=>TRUE); END;
ERROR at line 1:
ORA-06521: PL/SQL: Error mapping function
ORA-06512: at "SYS.DBMS_STATS", line 10301
ORA-06512: at "SYS.DBMS_STATS", line 10315
ORA-06512: at line 1
I have runt utlrp.sql as sys but with no avail.
Kindest Regards,
WillYou did not mention if the applicable table contains an ADT columns, nested tables and so on.
You can also do a basic test to determine if the problem is potentially with the table, or with dbms_stats itself. Create a plain table, e.g.
create table foo( id number, foo_char varchar2(100), constraint pk_foo primary key( id ) using index );
Using the exact same dbms_stats parameters, do this table. If it works, it points to a potential problem with the other table - some data structure/data type issue maybe. If it does not, then you have a problem with dbms_stats itself.
You can also drop the indexes on the DBO table and try dbms_stats with different parameters. I.e. change the conditions to see if the error still occur in order to isolate the problem.
You also could log an iTar/SR for this with Oracle Support. -
Hi,
I am getting the following error :
SQL> select MinDistance(TT) from egg1;
select MinDistance(TT) from egg1
ERROR at line 1:
ORA-06521: PL/SQL: Error mapping function
ORA-06522: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/custagg.so:
undefined symbol: ODCIAggregateInitialize
I am compiling my C program with OCI using the following command :
g++ -Wall -c custagg.c -o custagg.o -I$ORACLE_HOME/rdbms/public -I/usr/lib
I am linking to get a shared library custagg.so file with following command :
ld -shared -o custagg.so custagg.o $ORACLE_HOME/lib/l*.so ../../usr/lib/libstdc++.s*
I am not getting any errors during these two phases.
And when i am calling the extproc custagg(Mindistance) which i implemented using ODCI(oracle data catridge interface) ...I am getting the error undefined symbol : ODCIAggregateInitialize
So can any one please let me know what shared libraries are required to access the ODCI services and also am I compiling and linking it the right way or am I missing any libraries.
I have the oci.h & odci.h and several other header files in my :
$ORACLE_HOME/rdbms/public
And while linking i am using : $ORACLE_HOME/lib/*.so files.
So I don't know whether my directory is missing some shared files related to ODCI : can any one please let me know which files or shared libraries I am missing :
Below are list of files in my : $ORACLE_HOME/lib :
custagg123.o libclntsh.so libdbcfg10.so libjox10.so libocci.so.10.1 liborasdkbase.so libskgxpd.so libunwind.so.5
custagg.so libclntsh.so.10.1 libemmas10.so libldapjclnt10.so libocijdbc10.so liborasdkbase.so.10.2 libskgxpu.so libxdb.so
facility.lis libclsra10.so libhasgen10.so libnjni10.so libocr10.so liborasdk.so libsqlplus.so shell.so
hsdb_odbc.so libcorejava.so libheteroxa10.so libnjssl10.so libocrb10.so liborasdk.so.10.2 libsqora.so.10.1 sysliblist
hsdb_ora.so libcoresh10.so libhsbase.so libnnz10.so libocrutl10.so libqsmashr.so libsrvm10.so
lclasses12.zip libcprts.so.5 libhsnav.so libnque10.so libodm10.so libskgxn2.so libsrvmhas10.so
libagtsh.so libcxa.so.3 libimf.so libntcpaio10.so libodmd10.so libskgxns.so libsrvmocr10.so
libagtsh.so.1.0 libcxa.so.5 libirc.a libocci.so libons.so libskgxp10.so libuini10.so
Please reply to my queries.
Please let me know if you want to have a look at the symbols of my object file
Thanks & Regards,
-NNYour issue may relate to XE and it may relate to OCI but it does not relate to SQL and PL/SQL. Consider posting your question in a forum where it will be on topic.
When you do include full version information (3 decimal places) and the code that is generating the exception. -
Hi,
I am getting the following error :
SQL> select MinDistance(TT) from egg1;
select MinDistance(TT) from egg1
ERROR at line 1:
ORA-06521: PL/SQL: Error mapping function
ORA-06522: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/custagg.so:
undefined symbol: ODCIAggregateInitialize
I am compiling my C program with OCI using the following command :
g++ -Wall -c custagg.c -o custagg.o -I$ORACLE_HOME/rdbms/public -I/usr/lib
I am linking to get a shared library custagg.so file with following command :
ld -shared -o custagg.so custagg.o $ORACLE_HOME/lib/l*.so ../../usr/lib/libstdc++.s*
I am not getting any errors during these two phases.
And when i am calling the extproc custagg(Mindistance) which i implemented using ODCI(oracle data catridge interface) ...I am getting the error undefined symbol : ODCIAggregateInitialize
So can any one please let me know what shared libraries are required to access the ODCI services and also am I compiling and linking it the right way or am I missing any libraries.
I have the oci.h & odci.h and several other header files in my :
$ORACLE_HOME/rdbms/public
And while linking i am using : $ORACLE_HOME/lib/*.so files.
So I don't know whether my directory is missing some shared files related to ODCI : can any one please let me know which files or shared libraries I am missing :
Below are list of files in my : $ORACLE_HOME/lib :
custagg123.o libclntsh.so libdbcfg10.so libjox10.so libocci.so.10.1 liborasdkbase.so libskgxpd.so libunwind.so.5
custagg.so libclntsh.so.10.1 libemmas10.so libldapjclnt10.so libocijdbc10.so liborasdkbase.so.10.2 libskgxpu.so libxdb.so
facility.lis libclsra10.so libhasgen10.so libnjni10.so libocr10.so liborasdk.so libsqlplus.so shell.so
hsdb_odbc.so libcorejava.so libheteroxa10.so libnjssl10.so libocrb10.so liborasdk.so.10.2 libsqora.so.10.1 sysliblist
hsdb_ora.so libcoresh10.so libhsbase.so libnnz10.so libocrutl10.so libqsmashr.so libsrvm10.so
lclasses12.zip libcprts.so.5 libhsnav.so libnque10.so libodm10.so libskgxn2.so libsrvmhas10.so
libagtsh.so libcxa.so.3 libimf.so libntcpaio10.so libodmd10.so libskgxns.so libsrvmocr10.so
libagtsh.so.1.0 libcxa.so.5 libirc.a libocci.so libons.so libskgxp10.so libuini10.so
Please reply to my queries.
Please let me know if you want to have a look at the symbols of my object file
Thanks & Regards,
-NNIt's only a quick guess but have you checked your tnsnames.ora file to ensure you've opened the environment to find the libraries? If you set the EXTPROC_DLLS=ANY, you open the database to security issues but it should tell you if this cause because you can't access the library that contains the symbol.
SID_LIST_CALLOUT_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = <oracle_home_directory>)
(PROGRAM = extproc)
(ENV = "EXTPROC_DLLS=ONLY:
<oracle_home_directory>/customlib/writestr1.so
,LD_LIBRARY_PATH=<oracle_home_directory>/lib")
) -
Call a PL/SQL procedure or function from applet
Could anyone please let me know how I could call a PL/SQL procedure
or function from a JDBC method from applet with Internet Explorer?It depends from where you are calling your PLSQL routine. If it is SQL*Plus then you can use & (ampersand) with the variable to be input at run time.
If you are executing the PLSQL routine from another application (some front end application) then it's not possible. Because when a procedure is executing at server side, the front end application does not have control, and the control is only transfered back to front end application when the PLSQL routine either completes successfully or throws an exception.
In either case, you can not go back to the PLSQL routine.
In this case, what you can do is, write code in your front end application to get that variable value from user and then pass that value to PLSQL routine. -
Call to ldap server fails ORA-06521: PL/SQL: Error mapping function
I am getting this error(s)
ORA-06521: PL/SQL: Error mapping function
ORA-06512: at "SYS.DBMS_LDAP_API_FFI", line 0
ORA-06512: at "SYS.DBMS_LDAP", line 1338
ORA-06512: at "SYS.DBMS_LDAP", line 1273
ORA-06512: at "SYS.DBMS_LDAP", line 529
ORA-06512: at line 127
after binding and searching an ldap directory.
Line 127 is:
my_dn := DBMS_LDAP.get_dn(my_session, my_entry);
Both of the 'my_xx' parameters have been successfully set earlier in the script I believe as they produce no errors and DBMS_LDAP.count_entries(my_session, my_message) returns = 1.
I am following the example at:
http://download-west.oracle.com/docs/cd/B10501_01/network.920/a96577/smplcode.htm#636994
In fact any of the functions used in the 'while loop' in the above example give a similar error.
Apparently SYS.DBMS_LDAP_API_FFI is a call to an external C program, but this would be a standard Oracle one, not one I have written.
I am connecting to a non-Oracle ldap server, and have tried several (OpenLDAP 2.X, & Windows 2000 AD), with same results.
Any suggestions gratefully received.
Cheers
KIMFixed by running the catldap.sql script (ORACLE_HOME/rdbms/admin/catldap.sql) as SYS user and recreated the dbms_ldap packages. I am not sure why some of the functions worked OK and others did not.
KIM -
Parameter index move while executing PL/SQL stored procedure/function
Hello, community.
Have a question for you. It looked like very easy to write some small JDBC-wrapper to handle stored procedure/functions call for Oracle.
Here is the code snippet of it:
import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import javax.sql.DataSource;
import oracle.jdbc.driver.OracleTypes;
import org.apache.log4j.Logger;
public class SmallHelper {
public static final int CALL_TYPE__PROCEDURE = 1;
public static final int CALL_TYPE__FUNCTION = 2;
public static final int PARAMETER__IN = 1;
public static final int PARAMETER__OUT = 2;
private static final Logger log = Logger.getLogger(SmallHelper.class);
private Connection con = null;
private CallableStatement statement = null;
private String name;
private int type;
private int resultType;
private HashMap arguments = new HashMap();
* Creates connection using data source as parameter.
* @param ds - data source
* @throws EhlApplicationException
public SmallHelper(DataSource ds) throws Exception {
try {
con = ds.getConnection();
catch (SQLException e) {
ExceptionHelper.process(e);
public void registerProcedure(String name) {
this.name = name;
this.type = CALL_TYPE__PROCEDURE;
public void registerFunction(String name, int resultType) {
this.name = name;
this.resultType = resultType;
this.type = CALL_TYPE__FUNCTION;
* NB! When You're dealing with stored function index should start with number 2!
public void registerArgument(int index, Object value, int type, int inOutType) {
arguments.put(new Long(index), new CallableStatementArgument(value, type, inOutType));
private String getSQL() {
StringBuffer str = new StringBuffer("{ call ");
if ( type == CALL_TYPE__FUNCTION )
str.append(" ? := ");
str.append(name).append("( ");
for ( Iterator i = arguments.values().iterator(); i.hasNext(); ) {
i.next();
str.append("?");
if ( i.hasNext() )
str.append(", ");
str.append(") }");
return str.toString();
public void execute() throws SQLException{
String query = getSQL();
statement = con.prepareCall(query);
if ( type == CALL_TYPE__FUNCTION )
statement.registerOutParameter(1, resultType);
for ( Iterator i = arguments.keySet().iterator(); i.hasNext(); ) {
Long index = (Long) i.next();
CallableStatementArgument argument = (CallableStatementArgument) arguments.get(index);
int type = argument.getType();
if ( argument.getInOutType() == PARAMETER__OUT )
statement.registerOutParameter(index.intValue(), type);
else if ( type != OracleTypes.CURSOR )
statement.setObject(index.intValue(), argument.getValue(), type);
log.info("Executing SQL: "+query);
statement.execute();
public CallableStatement getStatement() {
return statement;
public void close() throws EhlApplicationException {
try {
if (statement != null)
statement.close();
if (con != null)
con.close();
catch (SQLException e) {
EhlSqlExceptionHelper.process(e);
private class CallableStatementArgument implements Serializable{
private Object value;
private int type;
private int inOutType;
public CallableStatementArgument(Object value, int type, int inOutType) {
this.value = value;
this.type = type;
this.inOutType = inOutType;
public int getType() {
return type;
public Object getValue() {
return value;
public int getInOutType() {
return inOutType;
}It was really done in 10-15 mins, so don't be very angry at code quality :)
Here is the problem.:
helper.registerProcedure("pkg_diagnosis.search_diagnosis");
helper.registerArgument(1, null, OracleTypes.CURSOR, EhlJdbcCallableStatementHelper.PARAMETER__OUT);
helper.registerArgument(2, pattern, OracleTypes.VARCHAR, EhlJdbcCallableStatementHelper.PARAMETER__IN);
helper.registerArgument(3, lang, OracleTypes.VARCHAR, EhlJdbcCallableStatementHelper.PARAMETER__IN);
helper.registerArgument(4, EhlSqlUtil.convertSetToString(langs, ","), OracleTypes.VARCHAR, EhlJdbcCallableStatementHelper.PARAMETER__IN);
helper.registerArgument(5, EhlSqlUtil.convertSetToString(diagnosisClass, ","), OracleTypes.VARCHAR, EhlJdbcCallableStatementHelper.PARAMETER__IN);
helper.registerArgument(6, parentId, OracleTypes.NUMBER, EhlJdbcCallableStatementHelper.PARAMETER__IN);
helper.execute();
ResultSet rs = ((OracleCallableStatement) helper.getStatement()).getCursor(1);
procedure definition:
procedure search_diagnosis (l_res OUT dyna_cur,
in_search_string IN VARCHAR2,
in_search_lang IN VARCHAR2,
in_lang_list IN VARCHAR2,
in_diag_class_list IN VARCHAR2,
in_parent_id IN NUMBER) Procedure call has inner check that fail because of som strange reason:
in_search_string has 2 as index, that is correct. but procedure recieves is as number 3 in parameter list (what is in_search_lang). Other parameters are moved to. It seems like a cursor takes 2 places in definition. It's clear that if I put in_search_string as 1 parameter and cursor as 0 I'll get invalid parametr bindong(s) exception. So... any ideas why 2nd parameter is actually 3rd?
Thanks beforehand.hmm...moreover:
if we change procedure to function and call it in a simple way:
CallableStatement stmnt = helper.getConnection().prepareCall("begin ? := pkg_diagnosis.search_diagnosis(?,?,?,?,?); end;");
stmnt.registerOutParameter(1, OracleTypes.CURSOR);
stmnt.setString(2, pattern);
stmnt.setString(3, lang);
stmnt.setString(4, langs);
stmnt.setString(5, diagnosisClass);
stmnt.setObject(6, parentId, OracleTypes.NUMBER);
stmnt.execute();
ResultSet rs = (ResultSet) stmnt.getObject(1);the exception is:
[BEA][Oracle JDBC Driver][Oracle]ORA-06550: line 1, column 14:
PLS-00382: expression is of wrong type
ORA-06550: line 1, column 7:
PL/SQL: Statement ignoredif we return some string or number - it works. but when we want cursor back - it fails.
cursor is defined like ordinary dynamic cursor:
TYPE dyna_cur IS REF CURSOR; -
Ldap problem, ORA-06521: PL/SQL: Error mapping function
I am getting this error(s)
ORA-06521: PL/SQL: Error mapping function
ORA-06512: at "SYS.DBMS_LDAP_API_FFI", line 0
ORA-06512: at "SYS.DBMS_LDAP", line 1338
ORA-06512: at "SYS.DBMS_LDAP", line 1273
ORA-06512: at "SYS.DBMS_LDAP", line 529
ORA-06512: at line 127
after binding and searching an ldap directory.
Line 127 is:
my_dn := DBMS_LDAP.get_dn(my_session, my_entry);
Both of the 'my_xx' parameters have been successfully set earlier in the script I believe as they produce no errors and DBMS_LDAP.count_entries(my_session, my_message) returns = 1.
I am following the example at:
http://download-west.oracle.com/docs/cd/B10501_01/network.920/a96577/smplcode.htm#636994
In fact any of the functions used in the 'while loop' in the above example give a similar error.
Apparently SYS.DBMS_LDAP_API_FFI is a call to an external C program, but this would be a standard Oracle one, not one I have written.
I am connecting to a non-Oracle ldap server, and have tried several (OpenLDAP 2.X, & Windows 2000 AD), with same results.
Any suggestions gratefully received.
Cheers
KIMScott,
Thanks for your concern. I should have explained. I am working in HTMLdb, successfully using ldap to authenticate, but now need to get the logged-in user's name and other details. All my attemps to use the wwv_flow_ldap functions have failed, and I am no resorting to DBMS_LDAP to get what I want. I am hoping thatsome helpful person can shed some light on this problem
Cheers
KIM
Maybe you are looking for
-
Can I get I cloud on OS 10.6.8?
I am extremely nervous about all the changes Apple have made recently. I run a business from my Mac at home using Iweb 08 on OS 10.6.8 with mobile me to host the site. I have done some homework- 1. I can get iWeb on Ilife '11 throught he applestoe on
-
Change Color of Image? I need a Mentor!
Hello to all, I am really needing some help. I am trying to build a script that will allow a user who visits a website to change the color of a house. For an example, when a user visits the site they are able to view a picture of a house with a defau
-
Oi vay! a mac thats too slow to use DVDs, quicktime, imovi,
OI VAY!!I believe I was sold a mac, by a mac expert nonetheless, that is far too slow and lacking in memory to watch videos in any form, dvd, file, with quicktime, etc. And it seems too old for the updates available. its a iBook G4 version 10.4.11 pr
-
IChat loses connection incessantly
IChat can't seem to maintain a connection to AIM. AOL instant messager maintains its connection just fine, however. Any ideas?
-
CRM Table name for International versions in BP (address)
hi can any one tell me the table name for the where the internation nation versions are stored in which table - above field will be in BP - Address