With the help of the ORA-00904 granted by ROLE
Hi all
I have an error using the grant through ROLE (Oracle 11.2.0.1 on redhat Linux)
Here is the explanation of my problem:
I create a package to wear patterns
create or replace PACKAGE usera.pkg_utils AS function f_my_function return RAW; END pkg_utils;
I create the package body:
create or replace PACKAGE BODY usera.pkg_utils AS function f_my_function return RAW is v_uuid RAW(16); begin v_uuid := sys.dbms_crypto.randombytes(16); return (utl_raw.overlay(utl_raw.bit_or(utl_raw.bit_and(utl_raw.substr(v_uuid, 7, 1), '0F'), '40'), v_uuid, 7)); end f_random_uuid; END pkg_utils;
I create a 'R_ROLE1' role to which I admit "EXECUTE ON USERA. PKG_UTILS TO R_ROLE1.
I give you that R_ROLE1 to the PUBLIC so that each user can access the package USERA. PKG_UTIS
If I call another user f_my_function, it works well.
If I call another user from a procedure f_my_function I get "ORA-00904".
ex: to UserB
create or replace PROCEDURE P_PROC AS num int; uuid_ RAW(16); BEGIN select usera.pkg_utils.f_my_function() into uuid_ from dual; END P_PROC; /
If I give you that directly "GRANT EXECUTE ON USERA. PKG_UTILS TO PUBLIC' so it works well.
Thus, the error comes from the fact that I use a role, but I can't fix it. I don't understand why USERB does not use its grant to the role of r_role1 granted to PUBLIC.
Is there something as USERB is unusable cascade role during the call to a procedure? is there something to "activate"? ".
Thank you all
See the doc database security for your answer and the explanation of what others have said.
http://docs.Oracle.com/CD/B28359_01/network.111/B28531/authorization.htm#i1007304
Operation of the roles in PL/SQL blocks
The use of roles in a PL/SQL block depends on if it is an anonymous block, or a block named (stored procedure, function, or trigger), and if it runs with the rights of the author or the rights of the applicant.
Roles used in the appointed with rights to define blocks
All roles are disabled in any PL/SQL block named (stored procedure, function, or trigger) that runs with the rights of the author. Roles are not used to privilege control, and you cannot define roles within the procedure of a DEFINER rights.
The
SESSION_ROLES
view shows all roles that are currently enabled. If a named PL/SQL block that runs with Definer Rights queriesSESSION_ROLES
, then the query will return no rows.
Tags: Database
Similar Questions
-
Please, I have the following question on the foreign key and the ora-00904
Thanks in advance!
I created the table:
Create the Department table
(
DNAME varchar (15) NOT NULL,
deptID number (5) NOT NULL,
Primary key (dname, deptid)
)
then...
Create table Manager
(
MgrID number (10) not null,
Not null, name varchar (10)
Start_date date not null,
Primary key (mgrid),
CONSTRAINT fk_department
FOREIGN KEY (dname, deptip)
Department of REFERENCES (dname, deptid)
)
Trying to create the table with the constraint, it yeilds one:
ORA-00904: "DNAME": invalid identifier
+.. .with an asterisk under "dname" in line: FOREIGN KEY (dname, deptip) +.
I tried joining my name of the column with quotation marks ("" "); capitalized for consistency; and we tried creating and editing then - all to nothing will do. I also tried to use the user interface with Oracle Express Edition and the moment where I click on create, the same error appears. Could someone help please straighten out me up - was this threat for four days.
Thanks again!Hello
Welcome to the forum!
Columns that will reference the other table must be declared just like all the other columns; including the names in a FOREIGN KEY constraint is not auotmatically define them.
It works:CREATE TABLE Manager ( mgrid NUMBER (10) NOT NULL, Name VARCHAR (10) NOT NULL, Start_date DATE NOT NULL, dname VARCHAR2 (15), -- New deptid NUMBER (5), -- New PRIMARY KEY (mgrid), -- CONSTRAINT fk_department FOREIGN KEY (dname, deptid) REFERENCES department (dname, deptid) );
(assuming that the departments table, you posted, there).
Is there a reason why you use VARCHAR instead of VARCHAR2?
In the departments table, do you really need both dname and deptid in the primary key? For example, if you have a line with name = "ACCOUNTING" and deptid = 10; is it possible that you could have another line with deptid = 10 and some different dname, say 'REASEARCH '? It is more common to only have a deptid as primary key and have columns in the foreign key constraints that reference.
-
DB decreased with the ora-7445
Hello
Oracle 9.2.0.8
OS: Solaris
one of my prod (OLAP) DB was down with ora - 7445.can someone please help.
Thank you
Sam.sam995972 wrote:
Thank you all for the quick response.bug any idea why this error occurring?
I hope that maybe it's BUG 8709146.
error ORA-7445 arises due to the inconsistency of the transaction locking internally.
Please contact the support of oracle through SR.
-
PLSQL procedure with the ORA-01858: a non-digit character was found where
Hi friends,
I'm pretty much back to the plsql programming. I am creating the plsql procedure that basically accepts the values of variables and controls difference of two columns if she's even if different it inserts values into the temporary table GTT_S_DOC_QUOTE, and then inserts data into another table in s_doc_quote please help me or correct my procedure.
Since I'm getting below error ORA-01858: a non-digit character was found here where waiting a digital .my procedure is as below.
CREATE OR REPLACE PROCEDURE QUOTE_STS)
ROW_ID_IN GGATE_CT. GTT_S_DOC_QUOTE. ROW_ID % TYPE,
STAT_CD_IN GGATE_CT. GTT_S_DOC_QUOTE. STAT_CD % TYPE,
PREV_STS_CD_IN GGATE_CT. GTT_S_DOC_QUOTE. PREV_STS_CD % TYPE,
BU_ID_IN GGATE_CT. GTT_S_DOC_QUOTE. BU_ID % TYPE,
CREATED_IN GGATE_CT. GTT_S_DOC_QUOTE. CREATED % TYPE,
X_CRRNT_TOT_AGRD_RMS_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_TOT_AGRD_RMS % TYPE,
X_CRRNT_TOT_BLCKD_RMS_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_TOT_BLCKD_RMS % TYPE,
X_CRRNT_TOT_PCKDUP_RMS_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_TOT_PCKDUP_RMS % TYPE,
X_CRRNT_TOT_PCKDUP_AVGRT_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_TOT_PCKDUP_AVGRT % TYPE,
X_CRRNT_TOT_BLCKD_AVGRT_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_TOT_BLCKD_AVGRT % TYPE,
X_CRRNT_CNTRCT_SR_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_SR_REVN % TYPE,
X_CRRNT_CNTRCT_FD_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_FD_REVN % TYPE,
X_CRRNT_CNTRCT_BEV_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_BEV_REVN % TYPE,
X_CRRNT_CNTRCT_RM_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_RM_REVN % TYPE,
X_CRRNT_USD_EXCHNG_RT_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_USD_EXCHNG_RT % TYPE,
X_CRRNT_CNTRCT_OTHR_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_OTHR_REVN % TYPE,
X_CRRNT_CNTRCT_RSRC_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_RSRC_REVN % TYPE,
LAST_UPD_IN GGATE_CT. GTT_S_DOC_QUOTE. LAST_UPD % TYPE)
BEGIN
IF (PREV_STS_CD == STAT_CD) then
END if;
INSERT INTO GTT_S_DOC_QUOTE)
ROW_ID,
STAT_CD,
PREV_STS_CD,
BU_ID,
CREATED,
X_CRRNT_TOT_AGRD_RMS,
X_CRRNT_TOT_BLCKD_RMS,
X_CRRNT_TOT_PCKDUP_RMS,
X_CRRNT_TOT_PCKDUP_AVGRT,
X_CRRNT_TOT_BLCKD_AVGRT,
X_CRRNT_CNTRCT_SR_REVN,
X_CRRNT_CNTRCT_FD_REVN,
X_CRRNT_CNTRCT_BEV_REVN,
X_CRRNT_CNTRCT_RM_REVN,
X_CRRNT_USD_EXCHNG_RT,
X_CRRNT_CNTRCT_OTHR_REVN,
X_CRRNT_CNTRCT_RSRC_REVN,
LAST_UPD
)
VALUES ('ROW_ID_IN',
"STAT_CD_IN,"
"PREV_STS_CD_IN,"
"BU_ID_IN,"
"CREATED_IN,"
"X_CRRNT_TOT_AGRD_RMS_IN,"
"X_CRRNT_TOT_BLCKD_RMS_IN,"
"X_CRRNT_TOT_PCKDUP_RMS_IN,"
"X_CRRNT_TOT_PCKDUP_AVGRT_IN,"
"X_CRRNT_TOT_BLCKD_AVGRT_IN,"
"X_CRRNT_CNTRCT_SR_REVN_IN,"
"X_CRRNT_CNTRCT_FD_REVN_IN,"
"X_CRRNT_CNTRCT_BEV_REVN_IN,"
"X_CRRNT_CNTRCT_RM_REVN_IN,"
"X_CRRNT_USD_EXCHNG_RT_IN,"
"X_CRRNT_CNTRCT_OTHR_REVN_IN,"
"X_CRRNT_CNTRCT_RSRC_REVN_IN,"
'LAST_UPD '.
);
INSERT INTO S_DOC_QUOTE_CT
(ROW_ID_OUT, STAT_CD_OUT, PREV_STS_CD_OUT, BU_ID_OUT, CREATED_OUT, X_CRRNT_TOT_AGRD_RMS_OUT, X_CRRNT_TOT_BLCKD_RMS_OUT, X_CRRNT_TOT_PCKDUP_RMS_OUT, X_CRRNT_TOT_PCKDUP_AVGRT_OUT,
X_CRRNT_TOT_BLCKD_AVGRT_OUT, X_CRRNT_CNTRCT_SR_REVN_OUT, X_CRRNT_CNTRCT_FD_REVN_OUT, X_CRRNT_CNTRCT_BEV_REVN_OUT, X_CRRNT_CNTRCT_RM_REVN_OUT, X_CRRNT_USD_EXCHNG_RT_OUT, X_CRRNT_CNTRCT_OTHR_REVN_OUT,
SELECT X_CRRNT_CNTRCT_RSRC_REVN_OUT ROW_ID), STAT_CD, PREV_STS_CD, BU_ID, CREATED, X_CRRNT_TOT_AGRD_RMS, X_CRRNT_TOT_BLCKD_RMS, X_CRRNT_TOT_PCKDUP_RMS, X_CRRNT_TOT_PCKDUP_AVGRT,.
X_CRRNT_TOT_BLCKD_AVGRT, X_CRRNT_CNTRCT_SR_REVN, X_CRRNT_CNTRCT_FD_REVN, X_CRRNT_CNTRCT_BEV_REVN, X_CRRNT_CNTRCT_RM_REVN, X_CRRNT_USD_EXCHNG_RT, X_CRRNT_CNTRCT_OTHR_REVN,
GGATE_CT X_CRRNT_CNTRCT_RSRC_REVN. GTT_S_DOC_QUOTE;
COMMIT;
end if;
end QUOTE_STS;I was wondering why I get this error even if I stated the PREV_STS_CD
What line do you think that you said PREV_STS_ID on? As far as I can see that the IF statement is the first mention of it in your code. My guess is that you mean PREV_STATS_ID_IN (goes the same for STAT_CD / STAT_CD_IN).
If you write
IF prev_sts_cd_in = stat_cd_in THEN NULL; END IF; do_something_here;
then "do_something_here" will be processed regardless of the IF condition. I think what you probably wanted was something like
IF prev_sts_cd_in = stat_cd_in THEN NULL; ELSE do_something_here; END IF;
Is it possible for the prev_sts_cd and the stat_cd null? The test above would not handle this.
Also, as others have mentioned, the first INSERT statement attempts to insert the strings like "ROW_ID_IN" you probably want to use the value of the ROW_ID_IN parameter, which is the reason why you get the error ORA-01858. I'm guessing here of course, but I took out the quotes.
That would make your code something like this:
CREATE OR REPLACE PROCEDURE quote_sts ( row_id_in ggate_ct.gtt_s_doc_quote.row_id%TYPE , stat_cd_in ggate_ct.gtt_s_doc_quote.stat_cd%TYPE , prev_sts_cd_in ggate_ct.gtt_s_doc_quote.prev_sts_cd%TYPE , bu_id_in ggate_ct.gtt_s_doc_quote.bu_id%TYPE , created_in ggate_ct.gtt_s_doc_quote.created%TYPE , x_crrnt_tot_agrd_rms_in ggate_ct.gtt_s_doc_quote.x_crrnt_tot_agrd_rms%TYPE , x_crrnt_tot_blckd_rms_in ggate_ct.gtt_s_doc_quote.x_crrnt_tot_blckd_rms%TYPE , x_crrnt_tot_pckdup_rms_in ggate_ct.gtt_s_doc_quote.x_crrnt_tot_pckdup_rms%TYPE , x_crrnt_tot_pckdup_avgrt_in ggate_ct.gtt_s_doc_quote.x_crrnt_tot_pckdup_avgrt%TYPE , x_crrnt_tot_blckd_avgrt_in ggate_ct.gtt_s_doc_quote.x_crrnt_tot_blckd_avgrt%TYPE , x_crrnt_cntrct_sr_revn_in ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_sr_revn%TYPE , x_crrnt_cntrct_fd_revn_in ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_fd_revn%TYPE , x_crrnt_cntrct_bev_revn_in ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_bev_revn%TYPE , x_crrnt_cntrct_rm_revn_in ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_rm_revn%TYPE , x_crrnt_usd_exchng_rt_in ggate_ct.gtt_s_doc_quote.x_crrnt_usd_exchng_rt%TYPE , x_crrnt_cntrct_othr_revn_in ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_othr_revn%TYPE , x_crrnt_cntrct_rsrc_revn_in ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_rsrc_revn%TYPE , last_upd_in ggate_ct.gtt_s_doc_quote.last_upd%TYPE ) IS BEGIN IF prev_sts_cd_in = stat_cd_in THEN NULL; ELSE INSERT INTO gtt_s_doc_quote ( row_id , stat_cd , prev_sts_cd , bu_id , created , x_crrnt_tot_agrd_rms , x_crrnt_tot_blckd_rms , x_crrnt_tot_pckdup_rms , x_crrnt_tot_pckdup_avgrt , x_crrnt_tot_blckd_avgrt , x_crrnt_cntrct_sr_revn , x_crrnt_cntrct_fd_revn , x_crrnt_cntrct_bev_revn , x_crrnt_cntrct_rm_revn , x_crrnt_usd_exchng_rt , x_crrnt_cntrct_othr_revn , x_crrnt_cntrct_rsrc_revn , last_upd ) VALUES ( row_id_in , stat_cd_in , prev_sts_cd_in , bu_id_in , created_in , x_crrnt_tot_agrd_rms_in , x_crrnt_tot_blckd_rms_in , x_crrnt_tot_pckdup_rms_in , x_crrnt_tot_pckdup_avgrt_in , x_crrnt_tot_blckd_avgrt_in , x_crrnt_cntrct_sr_revn_in , x_crrnt_cntrct_fd_revn_in , x_crrnt_cntrct_bev_revn_in , x_crrnt_cntrct_rm_revn_in , x_crrnt_usd_exchng_rt_in , x_crrnt_cntrct_othr_revn_in , x_crrnt_cntrct_rsrc_revn_in , last_upd ); INSERT INTO s_doc_quote_ct ( row_id , stat_cd , prev_sts_cd , bu_id , created , x_crrnt_tot_agrd_rms , x_crrnt_tot_blckd_rms , x_crrnt_tot_pckdup_rms , x_crrnt_tot_pckdup_avgrt , x_crrnt_tot_blckd_avgrt , x_crrnt_cntrct_sr_revn , x_crrnt_cntrct_fd_revn , x_crrnt_cntrct_bev_revn , x_crrnt_cntrct_rm_revn , x_crrnt_usd_exchng_rt , x_crrnt_cntrct_othr_revn , x_crrnt_cntrct_rsrc_revn , last_upd) SELECT row_id , stat_cd , prev_sts_cd , bu_id , created , x_crrnt_tot_agrd_rms , x_crrnt_tot_blckd_rms , x_crrnt_tot_pckdup_rms , x_crrnt_tot_pckdup_avgrt , x_crrnt_tot_blckd_avgrt , x_crrnt_cntrct_sr_revn , x_crrnt_cntrct_fd_revn , x_crrnt_cntrct_bev_revn , x_crrnt_cntrct_rm_revn , x_crrnt_usd_exchng_rt , x_crrnt_cntrct_othr_revn , x_crrnt_cntrct_rsrc_revn , last_upd FROM ggate_ct.gtt_s_doc_quote; END IF; END quote_sts;
-
Hi, here is my question:
The application context:
Oracle 10.2.0.4.0
Operating system: AIX Version 5.3A stored procedure executes queries on the web in order to call a Webmodele.
The used protocol is httpS.
A certificate has been defined with the Oracle Wallet (orapki) utilityProblem:
For several days, making the procedure call webservice no longer works.
The package has been changed on the database, no patch has been applied on the machine.The call to the procedure of utl_http.begin_request with the HTTPS url returns the following error:
ORA-29049: unknown record
ORA-06512: at "SYS." UTL_HTTP", line 1027
ORA-06512: at line 16 levelA small piece of code/oog is attached, see photo log_sql_ws_call.jpg
Question
Can you explain to me the meaning of the error ORA-29049, what may be the cause of this unexpected error and most importantly, how to fix?
Thank you for your help.Finally, it happends only a few days before the described error (ORA-29049), SSL v2 has been disabled on the target domain (SSL v3 has been disbled 1 year ago already).
The reactivation of SSL v2 solved the ORA-29049.
Now, I'm dealing with the ORA-12537: TNS:connection closed.
-
ORA-00904 ROW_NUMBER, problem with ORDER BY id
Hello world
I use Oracle 9i, I use ROW_NUMBER and I got the ORA-00904 because of the ORDER BY identifier.
And here is the error:SELECT * FROM (SELECT c.id_comp, c.nom, c.id_type_comp, c.libelle, c.standard, c.id_comp_std, c.id_comp_grp, (SELECT t.nom FROM type_composant t WHERE t.id_type_comp=c.id_type_comp ) AS nom_type_comp , (SELECT t.libelle FROM type_composant t WHERE t.id_type_comp=c.id_type_comp ) AS libelletype, (SELECT cc.nom FROM composant cc WHERE cc.id_comp=c.id_comp_std ) AS nom_comp_std, (SELECT ccc.nom FROM composant ccc WHERE ccc.id_comp=c.id_comp_grp ) AS nom_comp_grp, ROW_NUMBER() OVER (ORDER BY nom_type_comp) R FROM composant c) WHERE nom LIKE '%' AND R BETWEEN 0 and 200 ORDER BY nom_type_comp;
Apparently, it takes the pseudonym I use. I tried with the query instead of the alias, and it worked. Is there a way to do it with the alias because I would use a variable with my ORDER BY.ROW_NUMBER() OVER (ORDER BY nom_type_comp) R FROM composant c) * ERROR at line 25: ORA-00904: "NOM_TYPE_COMP": invalid identifier
Any help would be nice!
Andalusians
Published by: Guich may 12, 2011 10:40You may not use an alias defined on the same query plan.
The alias must be from a subquery.
Such as:SELECT * FROM (select my_table.*, ROW_NUMBER() OVER (ORDER BY nom_type_comp) R from (SELECT c.id_comp, c.nom, c.id_type_comp, c.libelle, c.standard, c.id_comp_std, c.id_comp_grp, (SELECT t.nom FROM type_composant t WHERE t.id_type_comp=c.id_type_comp ) AS nom_type_comp , (SELECT t.libelle FROM type_composant t WHERE t.id_type_comp=c.id_type_comp ) AS libelletype, (SELECT cc.nom FROM composant cc WHERE cc.id_comp=c.id_comp_std ) AS nom_comp_std, (SELECT ccc.nom FROM composant ccc WHERE ccc.id_comp=c.id_comp_grp ) AS nom_comp_grp FROM composant c) my_table) WHERE nom LIKE '%' AND R BETWEEN 0 and 200 ORDER BY nom_type_comp;
Nicolas.
-
Problem with the Update Script
I'm trying to update a column in the database with the following script, but still get errors on the ORA-00904: "CUSTOMER_CONTACT_NRD." "" "" ACTIVE ": identifier not valid, even thought it must be fair.
In the end, I want to update the table like that, but first test it on a single customer.
Are the media may not play directly, or am I missing something else?
Update v_contact v1
set
(v1.inactive_contact) = - 1
where (v1.cust_id =
customer_contact_nrd.customer_id and v1.contact_no =
customer_contact_nrd.contact_no and customer_contact_nrd.active = n
and v1.cust_id = 106586)
Thank you for your help.
Published by: mcramer on October 26, 2009 12:38Try something like this...
Update v_contract v1
Set v1.inactive_contact = - 1
where v1.cust_id in
(by selecting v1.cust_id in customer_contact_nrd v3
where v1.cust_id = v3.customer_id
and v1.contact_no = v3.contact_no
and v3.active = ' n and v1.cust_id = 106586)or read this...
http://www.jlcomp.demon.co.UK/FAQ/lost_update.html -
SDO ORA-00904 identifier valid after patch 20544696 and 20225988 (CPU Apr 15)
The seller of our web mapping system uses a syntax that contains the identifier SDO_GEOM. SDO_GEOMETRY and similar. An example simplified using the point constructor ODD as in...
Select sdo_geom.sdo_geometry (2001, 81989, sdo_geom.sdo_point_type (531599, 184530, null), null, null) double;This syntax has stopped working in the TEST database, after I applied the patches April 2015 CPU. It generates an ORA-00904: "SDO_GEOM. "" SDO_GEOMETRY ': identifier not valid, which in fact I was expecting. The package SDO_GEOM in schema MDSYS, often referenced without the option scheme by the public synonym, do not contain a type or function SDO_GEOMETRY. I've never used this syntax and wrote instead...
Select mdsys.sdo_geometry (2001, 81989, mdsys.sdo_point_type (531599, 184530, null), null, null) double;
.. of course, who continues to work. However, to my surprise, I found that the syntax of the provider, which generates the ORA-00904 in all databases of fix post, works perfectly well in all our pre patch databases.
Is the same for all other types in the MDSYS (SDO_ELEM_INFO_ARRAY, SDO_ORDINATE_ARRAY...) schema.
I'm dealing with the strange situation where I not only understand why something has stopped working; first of all I do not understand why the syntax of the seller has already worked.
We are using Oracle 11.2.0.4 EE with Oracle Spatial on Windows Server 2008 R2 64-bit. Patches that have been requested are
1) patch 20544696: WINDOWS DB BUNDLE PATCH 11.2. 0.4.15
2) patch 20225988: WINDOWS ORACLE JAVAVM COMPONENT BUNDLE PATCH 11.2. 0.4.3Kind regards
Torsten
Hi Torsten,
Well, here you have a kind of strange thing Oracle Spatial. If you told me that
SELECT SDO_GEOM.SDO_GEOMETRY(2001, 81989, SDO_GEOM.SDO_POINT_TYPE(531599, 184530, NULL), NULL, NULL) FROM dual;
is a valid statement, I'd say of course not. But on my production server which is the power supply 11.2.0.4.5, it works!
However, on a 12 c test server it does not work.
All I can say is that you are right in everything you say. Oracle has removed everything that made this weird syntax once the work and it seems that the PSU April stops for good. Your provider needs to fix things and perhaps address why they used such a weird thing in the first place.
Like you I don't see what makes this function on 11g. There is no synonym that I see. And if wrap you it in an anonymous block fails
DECLARE foo SDO_GEOMETRY; BEGIN SELECT SDO_GEOM.SDO_GEOMETRY(2001,81989,SDO_GEOM.SDO_POINT_TYPE(531599,184530,NULL),NULL,NULL) INTO foo FROM dual; END; /
Strange thing indeed. I guess there could be a wider discussion here on what patches are in turn brought in 11g and if the side effects are always worth.
See you soon,.
Paul
-
java.sql.SQLSyntaxErrorException: ORA-00904: invalid identifier
Hi all
IM using JDeveloper 11.1.1.6.0.
Here, I said method in the main class, which returns an object of type of connection reference.
When I run the app I type 'ksh' in the fields and click on submit.
It shows the following error, java.sql.SQLException: ORA-00904: "KSH": invalid identifier
{code}
public static list < privileges > getUserPrivileges (DBTransaction dbt, object userId)
{
String sql = "SELECT m.menu_code" +.
"OF sec_menus m p sec_menu_privileges JOIN +.
"WE (m.menu_code = p.menu_code '+)"
"(ET m.app_id = p.app_id)" + "
"JOIN sec_user_app_groups g +.
"WE (g.GROUP_ID = p.GROUP_ID '+)"
"AND p.app_id = g.app_id" +.
"AND user_id =" + userId + "."
" )";
PreparedStatement stat = null;
ResultSet rs = null;
List of privileges <>privilegesList = new ArrayList < privileges > ();
MenuCode string = "";
Try
{
= stat dbt.createPreparedStatement (sql, 1);
RS = stat.executeQuery ();
While (RS. Next())
{
menuCode = rs.getString (1);
}
}
catch (System.Exception e)
{
e.printStackTrace ();
}
Finally
{
closeStatement (stat);
closeResultSet (SR);
}
Return privilegesList;
}
Public Shared Sub closeStatement (stat of statement)
{
Try
{
STAT. Close();
}
catch (SQLException e)
{
}
}
public static void closeResultSet (ResultSet rs)
{
Try
{
RS. Close();
}
catch (SQLException e)
{
}
}
------------
CREATE TABLE SEC_USERS
(
USER_ID VARCHAR2 (10),
USER_NAME VARCHAR2 (50).
PASSWORD VARCHAR2 (300)
)
Insert into SEC_USERS
(USER_ID, USER_NAME, USER_FIRST_NAME, USER_LAST_NAME, PASSWORD)
Values
('ksh', 'ksh', 'test');
COMMIT;
-----------------------
Error:
java.sql.SQLSyntaxErrorException: ORA-00904: "KSH": invalid identifier
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:462)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:405)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:931)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:481)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:205)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:548)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:217)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:947)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1283)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1441)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3769)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3823)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1671)
dry. ControllerUtil.getUserPrivileges (ControllerUtil.java:90)
dry. ControllerUtil.login (ControllerUtil.java:59)
at sec.model.AppModuleImpl.login(AppModuleImpl.java:77)
at sec.control.bean.LoginPage.loginAction(LoginPage.java:92)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke (unknown Source)
at com.sun.el.MethodExpressionImpl.invoke (unknown Source)
at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:46)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:190)
to oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$ 1.run(ContextSwitchingComponent.java:92)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:361)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:96)
at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:102)
to oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$ 1.run(ContextSwitchingComponent.java:92)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:361)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:96)
at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:96)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:889)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:379)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:194)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
to weblogic.servlet.internal.StubSecurityHelper$ ServletServiceAction.run (StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:205)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:106)
to org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$ FilterListChain.doFilter (TrinidadFilterImpl.java:446)
at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
to org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$ FilterListChain.doFilter (TrinidadFilterImpl.java:446)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:271)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:177)
at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adf.library.webapp.LibraryFilter.doFilter(LibraryFilter.java:179)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
to oracle.security.jps.ee.http.JpsAbsFilter$ 1.run(JpsAbsFilter.java:119)
at java.security.AccessController.doPrivileged (Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:442)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:139)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
to weblogic.servlet.internal.WebAppServletContext$ ServletInvocationAction.wrapRun (WebAppServletContext.java:3715)
to weblogic.servlet.internal.WebAppServletContext$ ServletInvocationAction.run (WebAppServletContext.java:3681)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
< ActionListenerImpl > < processAction > java.lang.NullPointerException
javax.faces.el.EvaluationException: java.lang.NullPointerException
at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:51)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:190)
to oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$ 1.run(ContextSwitchingComponent.java:92)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:361)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:96)
at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:102)
to oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$ 1.run(ContextSwitchingComponent.java:92)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:361)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:96)
at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:96)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:889)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:379)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:194)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
to weblogic.servlet.internal.StubSecurityHelper$ ServletServiceAction.run (StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:205)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:106)
to org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$ FilterListChain.doFilter (TrinidadFilterImpl.java:446)
at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
to org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$ FilterListChain.doFilter (TrinidadFilterImpl.java:446)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:271)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:177)
at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adf.library.webapp.LibraryFilter.doFilter(LibraryFilter.java:179)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
to oracle.security.jps.ee.http.JpsAbsFilter$ 1.run(JpsAbsFilter.java:119)
at java.security.AccessController.doPrivileged (Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:442)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:139)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
to weblogic.servlet.internal.WebAppServletContext$ ServletInvocationAction.wrapRun (WebAppServletContext.java:3715)
to weblogic.servlet.internal.WebAppServletContext$ ServletInvocationAction.run (WebAppServletContext.java:3681)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
Caused by: java.lang.NullPointerException
dry. ControllerUtil.closeResultSet (ControllerUtil.java:136)
dry. ControllerUtil.getUserPrivileges (ControllerUtil.java:118)
dry. ControllerUtil.login (ControllerUtil.java:59)
at sec.model.AppModuleImpl.login(AppModuleImpl.java:77)
at sec.control.bean.LoginPage.loginAction(LoginPage.java:92)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke (unknown Source)
at com.sun.el.MethodExpressionImpl.invoke (unknown Source)
at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:46)
... more than 54
{\code}
Thanks in advance
The particular error that causes the ORA-00904 exception, it's that you concatenate a string literal in the SQL statement without enclosing the literal with quotes. Replace the line
"AND user_id =" + userId + "."
with
"AND user_id = '" + Userid + "'" +.
Although it will work in this way, the concatenation of literal values variable to a SQL statement is a very wrong approach. The right approach is to use a placeholder variable (for example?) in the SQL statement and to link it with the necessary value after analysis of the declaration and before running. In this way, you will be able to analyze the statement once and execute it several times with different values without new analysis view the statement. Also, the SQL engine will be able to use its SQL cache if you try to analyze the statement even once again, which will significantly improve performance. However, if you concatenate variable literal value to education, engine SQL won't recognize the statement as one already analyzed, it will not use its cache and it will analyze the statement again from scratch. From a point of view shortly, the best approach is as follows:
"" AND user_id =? ".
and then
= stat dbt.createPreparedStatement (sql, 1);
stat.setString (1, userId); Don't forget to change the username to a string type in the method declaration
RS = stat.executeQuery ();
There are other problems in your code. First of all, the invocation closeResultSet (rs) after closeStatement (stat) is erroneous and obsolete, because when you close a SQLStatement instance it automatically closes all its result sets. Secondly, in the finally block you call closeStatement (stat), but there is no guarantee that stat variable is not null. For example, the variable stat can be null if the SQLStatement instance has not been established successfully in the try section above.
Dimitar
-
Number of error SQL ORA-00904: invalid column name has occurred.
Hello
on P8.18 on a Win 2003 server when we launch SWPAUDIT, it failed with:
Number of error SQL ORA-00904: invalid column name has occurred. Query process failed.
I searched this error on metalink3. Nothing in connection with.
Any idea?
Thank you.Please give a clear picture of what you are doing... .and what paintings... There is the possibility of the audit refers to certain tables... with deleted. names of columns just look in the structure of what you audit?
Please, find the name of column...
ORA-00904: string: invalid identifier
Cause: The column name entered is invalid or missing.
Action: Enter a valid column name. A valid column name must start with a letter, must be less than or equal to 30 characters and include only alphanumeric characters and the special characters $, _, and #. If it contains other characters, then it must be enclosed in quotation marks. It cannot be a reserved word. -
ORA-00904: 'TIMESTAMPADD': identifier invalido
Hi all.
Can help you with this error?
ORA-00904: 'TIMESTAMPADD': identifier invalido
I am trying this:
SELECT (timestampadd (SQL_TSI_MONTH, 3, TIMESTAMP ' 2010-11-30 10:00:00 ')) FROM dual;
TKS
Simone
Hello.
Sorry for my confusion.
It is a Timesten database. Not an oracle database.
REF. http://docs.oracle.com/en/database/
Tkss
-
HELP-immediate execution in PL/SQL has received the error ORA-00904: invalid identifier
What is the problem with the following codes from PL/SQL (actually it comes to Oracle Metalink Note: 313175.1):
===========
declare
cursor c1 is select * from $ semantic;
v_statement VARCHAR2 (255);
v_nc number (10);
v_nt number (10);
Start
immediate execution
"select count (*) from $ semantics" in v_nc;
immediate execution
' select count (distinct s_table_name) of semantics$ "in v_nt;
dbms_output.put_line
('Edit' | v_nc |) 'columns ' | v_nt | "tables");
to r1 c1 loop
v_statement: = 'ALTER TABLE ' | R1.s_owner | '.' || R1.s_table_name;
v_statement: = v_statement | «change (' |)» R1.s_column_name | ' ';
v_statement: = v_statement | R1.s_data_type | ' (' | r1.s_char_length;)
v_statement: = v_statement | ' CHAR))';
immediately run v_statement;
end loop;
dbms_output.put_line ('Done');
end;
/
=====
Executed once the codes as sysdba against 10gr 2 database, I got this error:
From build to select columns to change
Editing columns 4428 35249
declare
*
ERROR on line 1:
ORA-00904: invalid identifier
ORA-06512: at line 22
I see nothing wrong with the line of "immediate execution". I appreciate your help!
Thank you.Hello
Try to print the offending instruction using exception, I used small test cases by changing the pl/sql block, you may need to change to respond to all other types of data in this table.CREATE TABLE semantics$ AS SELECT USER AS owner, table_name, data_type AS s_data_type, column_name, data_length AS s_char_length FROM cols WHERE table_name = 'MY_OBJECTS'; DECLARE CURSOR c1 IS SELECT * FROM semantics$; v_statement VARCHAR2 (255); v_nc NUMBER (10); v_nt NUMBER (10); BEGIN EXECUTE IMMEDIATE 'select count(*) from semantics$' INTO v_nc; EXECUTE IMMEDIATE 'select count(distinct table_name) from semantics$' INTO v_nt; DBMS_OUTPUT.put_line( 'ALTERing ' || v_nc || ' columns in ' || v_nt || ' tables'); FOR r1 IN c1 LOOP v_statement := 'ALTER TABLE ' || r1.owner || '.' || r1.table_name; v_statement := v_statement || ' modify (' || r1.column_name || ' '; v_statement := v_statement || r1.s_data_type || '(' || r1.s_char_length; IF (r1.s_data_type = 'NUMBER') THEN v_statement := v_statement || '))'; ELSE v_statement := v_statement || ' CHAR))'; END IF; DBMS_OUTPUT.put_line (v_statement); -- EXECUTE IMMEDIATE v_statement; END LOOP; DBMS_OUTPUT.put_line ('Done'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ('Statement = ' || v_statement); DBMS_OUTPUT.put_line (SUBSTR (SQLERRM, 1, 200)); RAISE; END;
_ Output
ALTERing 13 columns in 1 tables ALTER TABLE MY_OBJECTS modify (OWNER VARCHAR2(30 CHAR)) ALTER TABLE MY_OBJECTS modify (OBJECT_NAME VARCHAR2(30 CHAR)) ALTER TABLE MY_OBJECTS modify (SUBOBJECT_NAME VARCHAR2(30 CHAR)) ALTER TABLE MY_OBJECTS modify (OBJECT_ID NUMBER(22)) ALTER TABLE MY_OBJECTS modify (DATA_OBJECT_ID NUMBER(22)) ALTER TABLE MY_OBJECTS modify (OBJECT_TYPE VARCHAR2(19 CHAR)) ALTER TABLE MY_OBJECTS modify (CREATED DATE(7 CHAR)) ALTER TABLE MY_OBJECTS modify (LAST_DDL_TIME DATE(7 CHAR)) ALTER TABLE MY_OBJECTS modify (TIMESTAMP VARCHAR2(19 CHAR)) ALTER TABLE MY_OBJECTS modify (STATUS VARCHAR2(7 CHAR)) ALTER TABLE MY_OBJECTS modify (TEMPORARY VARCHAR2(1 CHAR)) ALTER TABLE MY_OBJECTS modify (GENERATED VARCHAR2(1 CHAR)) ALTER TABLE MY_OBJECTS modify (SECONDARY VARCHAR2(1 CHAR)) Done
Concerning
Published by: OrionNet on January 5, 2009 23:53
Published by: OrionNet on January 5, 2009 23:55
-
Help with the exception of Pl/SQL 'ora-3150 end of file on the communication channel.
Hello.
The code attached to this post opens a slider that load of 99 dblinks from different remote databases of different version.
He captures the information from these databases and stores them locally on a central database (11.2.0.4.0 version) on different tables.
The problem I have is that when a database is deleted, the dblink to this database show me the error 'ora-3150 end of file on communication channel' and that's right.
But he's not going trough the exception that I created, the cursor is closed and does not continue with the cycle.
The exception I created insert data on DBMONITOR error. DBMONITOR_LOG_ERROR_TABLE in order to catch the error (you'll be able to see all the code on the attachment)
It's the exception:
exception
while others then
INSERT IN DBMONITOR. DBMONITOR_LOG_ERROR_TABLE (NOMBRE_DBLINK, message, info, FECHA_ERROR, TIPO_PROCEDURE) VALUES (var, SUBSTR (DBMS_UTILITY. (FORMAT_ERROR_STACK, 1, 200), "CONNECTION ERROR", SYSDATE, 'CAPACITY');
commit;
end;
Could help me please on how could intercept this exception?
Thank you.
Juan.
You might have a problem with your connection or mishandling. The end of the file ora-3150, on channel of communication error means that there is a connection, but this link was broken somehow.
If a database is not reachable, you should get other types of errors.
For example judgment of the Kingdom or tns - memory could not resolve alias or simliar things.
Here is a list of typical mistakes I have check and manage when accessing remote databases.
e_db_link_broken EXCEPTION; --ORA-02019 connection description for remote database not found PRAGMA EXCEPTION_INIT (e_db_link_broken, -02019); e_oracle_not_available EXCEPTION; --ORA-01034 ORACLE not available PRAGMA EXCEPTION_INIT (e_oracle_not_available, -01034); e_oracle_down EXCEPTION; --ORA-27101: shared memory realm does not exist PRAGMA EXCEPTION_INIT (e_oracle_down, -27101); e_no_listener EXCEPTION; --ORA-12541: TNS:no listener PRAGMA EXCEPTION_INIT (e_no_listener, -12541); e_no_service EXCEPTION; --ORA-12514: TNS:listener does not currently know of service requested in connect descriptor PRAGMA EXCEPTION_INIT (e_no_service, -12514); e_timeout EXCEPTION; --ORA-12170: TNS:Connect timeout occurred PRAGMA EXCEPTION_INIT (e_timeout, -12170);
If you have a long open session and fail to close the db links after recovered information from the remote site?
In addition, I propose to change your dynamic insertion in a normal insert.
First extract the data of the DB link dynamically, but just with a select statement. Then do the insertion with the result data.
Improve your logging table to store messages up to 4000 char CHARACTER. 200 is really small for error messages.
In addition to the DBMS_UTILITY. FORMAT_ERROR_STACK you must also connect DBMS_UTILITY. FORMAT_ERROR_BACKTRACE. Just to see if you get a better message there.
WHEN e_db_link_broken or e_oracle_not_available or e_oracle_down or e_no_listener or e_no_service or e_timeout THEN INSERT INTO DBMONITOR.DBMONITOR_LOG_ERROR_TABLE (NOMBRE_DBLINK, message, info,FECHA_ERROR,TIPO_PROCEDURE) VALUES(var, 'Remote DB not accessible','ERROR DE CONEXION',SYSDATE,'CAPACITY'); -- commit; WHEN OTHERS THEN INSERT INTO DBMONITOR.DBMONITOR_LOG_ERROR_TABLE (NOMBRE_DBLINK, message, info,FECHA_ERROR,TIPO_PROCEDURE) VALUES(var, SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, 1, 4000),'ERROR DE CONEXION',SYSDATE,'CAPACITY'); --commit; end;
-
ORA-00904 on CREATE TABLE with a virtual column based on the XMLTYPE content
Hello
This is another one for the gurus of the syntax...
Try the following, fails with ORA-00904: "MESSAGE". "' GETROOTELEMENT": invalid identifier
While it succeedsCREATE TABLE XML_TEST_VIRT ( MSG_TYPE GENERATED ALWAYS AS (MESSAGE.GETROOTELEMENT()) VIRTUAL, MESSAGE XMLTYPE NOT NULL, IE906 XMLTYPE DEFAULT NULL ) XMLTYPE COLUMN MESSAGE STORE AS SECUREFILE BINARY XML XMLTYPE COLUMN IE906 STORE AS SECUREFILE BINARY XML /
The GETROOTELEMENT from SYS member function. XMLTYPE is stated as "PARALLEL_ENABLE DETERMINISTIC" the method called is not the problem, as evidenced by the 2nd case.CREATE TABLE XML_TEST_VIRT ( MSG_TYPE GENERATED ALWAYS AS (EXTRACT(MESSAGE, '/*').GETROOTELEMENT()) VIRTUAL, MESSAGE XMLTYPE NOT NULL, IE906 XMLTYPE DEFAULT NULL ) XMLTYPE COLUMN MESSAGE STORE AS SECUREFILE BINARY XML XMLTYPE COLUMN IE906 STORE AS SECUREFILE BINARY XML /
Using the MESSAGE column that is of type XMLTYPE directly seems to be the problem. But the question is "why." The result of the EXTRACT function is of type XMLTYPE and call his works of members, the column is also of type XMLTYPE still call its members fails...
Thanks in advance for any ideas on that.
Best regards
PhilippeGoing on the means to go far, far back.
-
Hello
I'm doing a validation test of principle with regard to the rights of the applicant. I created 2 diagrams of Test (DEFINER1 and INVOKER1) for the same thing. When I call a procedure in the Invoker1 Definer1 and the procedure has, in turn, a SQL statement inside that a PL/SQL function calls, so he get ORA-00904 "" is not a valid identifier. All procedures/packages in the scheme of Definer1 are created as the rights of the applicant. Simplified script below for the same, kindly let me know if I make a mistake, it's the expected behavior, or miss me something.
set line 10000
Set feedback off
------------------------------------------------------------------------------------------------------------------------------
QUICK problem: error ORA-00904: "object name": invalid identifier
CALLS while the use of the appellant's rights, procedure call PL/SQL that has a SQL that calls a PL/SQL function.
------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------
GUEST
GUEST
------------------------------------------------------------------------------------------------------------------------------
Creating patterns DEFINER1 and INVOKER1 QUICK...
GUEST
------------------------------------------------------------------------------------------------------------------------------
CREATE DEFINER1 USER IDENTIFIED BY DEFINER1
TEMPORARY TEMP TABLESPACE
/
GRANT CREATE SESSION TO DEFINER1
/
GRANT CREATE PROCEDURE FOR DEFINER1
/
CREATE INVOKER1 USER IDENTIFIED BY INVOKER1
TEMPORARY TEMP TABLESPACE
/
GRANT CREATE SESSION TO INVOKER1
/
GRANT CREATE PROCEDURE FOR INVOKER1
/
------------------------------------------------------------------------------------------------------------------------------
GUEST will now connect to the DEFINER1 schema...
GUEST
CONNECT DEFINER1/DEFINER1
------------------------------------------------------------------------------------------------------------------------------
Creating QUICK package (with rights of Summoners) with 2 functions simple (one with PRAGMA RESTRICT_REFERENCES another without him.)...
GUEST
------------------------------------------------------------------------------------------------------------------------------
CREATE or REPLACE PACKAGE global_pkg
AUTHID CURRENT_USER
AS
FUNCTION add2 (NUMBER of p1
NUMBER of p2
)
RETURN NUMBER;
FUNCTION add2_rr (NUMBER of p1
NUMBER of p2
)
RETURN NUMBER;
PRAGMA RESTRICT_REFERENCES (add2_rr, WNDS, WNPS, NSOR, RNP);
END global_pkg;
/
---------------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY GLOBAL_PKG
AS
---------------------------------------------------------------
FUNCTION add2 (NUMBER of p1
NUMBER of p2
)
RETURN NUMBER
IS
BEGIN
RETURN (p1 + p2);
END add2;
---------------------------------------------------------------
FUNCTION add2_rr (NUMBER of p1
NUMBER of p2
)
RETURN NUMBER
IS
BEGIN
RETURN (p1 + p2);
END add2_rr;
---------------------------------------------------------------
END global_pkg;
/
------------------------------------------------------------------------------------------------------------------------------
ENCOURAGE creating stand-alone simple function (with rights of Summoners)...
GUEST
------------------------------------------------------------------------------------------------------------------------------
FUNCTION to CREATE or REPLACE add2 (NUMBER of p1
NUMBER of p2
)
RETURN NUMBER
AUTHID CURRENT_USER
IS
BEGIN
RETURN (p1 + p2);
END ADD2;
/
------------------------------------------------------------------------------------------------------------------------------
PROMPT creation of procedure (with rights of Summoners) who calls the Package and functions...
GUEST
------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE pr_tester
AUTHID CURRENT_USER
IS
l_num NUMBER (2);
BEGIN
dbms_output.put_line (1 + 1 = ' | global_pkg.add2_rr (1,1));
BEGIN
SELECT global_pkg.add2_rr (1.1)
IN l_num
FROM DUAL;
dbms_output.put_line ('worked..');
EXCEPTION
WHILE OTHERS
THEN
dbms_output.put_line ('global_pkg.add2_rr wo' |) SQLERRM);
END;
dbms_output.put_line (1 + 1 = ' | global_pkg.) ADD2 (1,1));
BEGIN
SELECT global_pkg.add2 (1.1)
IN l_num
FROM DUAL;
dbms_output.put_line ('worked..');
EXCEPTION
WHILE OTHERS
THEN
dbms_output.put_line ('global_pkg.add2 wo' |) SQLERRM);
END;
dbms_output.put_line (1 + 1 = ' |) ADD2 (1,1));
BEGIN
SELECT add2 (1.1)
IN l_num
FROM DUAL;
dbms_output.put_line ('worked..');
EXCEPTION
WHILE OTHERS
THEN
dbms_output.put_line ('add2 wo' |) SQLERRM);
END;
END;
/
------------------------------------------------------------------------------------------------------------------------------
Grant QUICK overlooking the procedure to INVOKER1 scheme...
GUEST
------------------------------------------------------------------------------------------------------------------------------
GRANT EXECUTE ON pr_tester TO invoker1
/
------------------------------------------------------------------------------------------------------------------------------
Test QUICK 1: Define schema works...
GUEST
------------------------------------------------------------------------------------------------------------------------------
SET SERVEROUTPUT ON
BEGIN
pr_tester;
END;
/
------------------------------------------------------------------------------------------------------------------------------
GUEST
GUEST
GUEST
GUEST will now connect to the INVOKER1 schema...
GUEST
CONNECT INVOKER1/INVOKER1
------------------------------------------------------------------------------------------------------------------------------
Test FAST 2: Fails with ORA - 00904 define schema
------------------------------------------------------------------------------------------------------------------------------
SET SERVEROUTPUT ON
BEGIN
definer1.pr_tester;
END;
/
------------------------------------------------------------------------------------------------------------------------------
GUEST
GUEST
GUEST
INVITE to drop the two schemas, enter the password for the sys
------------------------------------------------------------------------------------------------------------------------------
CONNECT SYS AS SYSDBA
DROP USER CASCADE DEFINER1
/
DROP USER INVOKER1
/
------------------------------------------------------------------------------------------------------------------------------
GUEST
GUEST has dropped to users...
------------------------------------------------------------------------------------------------------------------------------
Thank you
Marie.
Basically, you know the answer...
Why you call procedure Tester pr_tester with the name of schema prefix (definer1.pr_tester) during his call of the schema of the invoker?
Now... Imagine the following query runs under the scheme of the appellant:
SELECT global_pkg.add2_rr (1.1)
IN l_num
FROM DUAL;
the schema of the invoker 'knows' global_pkg?
HTH
Maybe you are looking for
-
I have installed the latest flash, like I always do, but my webcam is not working with it (a known issue at adobe)Their solution is to install an older version of flash.It worked well until today firefox decides to turn it off and force me to update
-
Hi all I need drivers XP for VGC-RT150Y. The only one that I'm currently missing is the TV tuner driver/application. Any help would be really appreciated
-
After installing updates ms error 0x0000008e
15 ms updates have been installed on January 11 after updates installed, I got error 0x0000008e and blue screen physical memory dumpI did system restore, now I have MSI flashing on the screen when I open that no matter what program clean boot still h
-
HP officejet pro x476dw poster code 0xc6fd0013
HelloMy printer brand new display shows this code: 0xc6fd0013 and no longer works.I tried all the steps, prvided by manual, but without success.What is on with him, is it possible to solve the problem (and how?) or do I put HP?Thank you for the suppo
-
Hi all Just got my rocket and had problems with the message "90 MB" free to build music db, even if there is loads of free space. So I downloaded the update which updated to v 01.01.22.. After that, the music player just constantly jumps on all music