Skip to Main Content
  • Questions
  • Accessing views/tables from Discoverer only

Breadcrumb

Question and Answer

Tom Kyte

Thanks for the question.

Asked: October 26, 2002 - 3:27 pm UTC

Last updated: March 16, 2006 - 2:05 pm UTC

Version: 8.1.7

Viewed 1000+ times

You Asked

Tom,
We would like to put in a few restrictions on certain de-normalized views we have in the oracle database, so that end users can get to these views only from Discoverer and not any other tool like Microsoft Access(using ODBC...).

Can this be done. If so can you please explain how?

Thanks

and Tom said...

I've asked Derrick Cameron -- our resident Business Intelligence expert -- to look at this and he says:

...
Disco 9i still uses database userids, unless you are using an 'APPS'
EUL, which then uses Oracle Applications user, proxying in with the
database user APPS. You can fetch v$session.module and see that
Discoverer4, and know that way the calling program. You could have this
in a security policy if you want to restrict access to tables to only
Discoverer. A couple of years ago I wrote the attached script to
protect public EULs from external tampering, if that is what you're
getting at. 9iAS v3 will have enterprise security, but not till then.
....

<note from tom>Since any application could reasonably call DBMS_APPLICATION_INFO.SET_MODULE and put "Discoverer4" in there -- this is not a 100% solution. You could also use the username of the connecting user (make sure they are one of the people that should be running DISCO, the IP address of the client (if you are using 3 tier, the ip address would be of the disco server, not the actual end users) and whatever else you wanted to verify that they should have access</note>


here is the code for reference:

-- This function applies a dynamic predicate to specified tables to check whether the user is accessing
-- the table/view through discoverer
-- if you are using the EUL gateway the policy must be disabled
-- after compiling this function you need to apply it using the dbms_rls package

FUNCTION secure_eul (obj_schema VARCHAR2, obj_name VARCHAR2)
RETURN VARCHAR2 IS
d_predicate VARCHAR2(2000);
--
access_program number := 0;
--
BEGIN
--
-- first see if user is updating the EUL tables with discoverer
--
SELECT count(*)
INTO access_program
FROM sys.v_$session
WHERE module not like '%Discoverer%'
AND module is not null
AND username = user
AND type = 'USER';
--
IF access_program >0 THEN
--
d_predicate := '1=2'; -- deny access
--
ELSE
--
d_predicate := '1=1'; -- allow access
--
END IF;
--
RETURN d_predicate;

END;

REATE OR REPLACE PACKAGE APPLY_EUL4_SECURITY IS
--*****************************************************************************
--
PROCEDURE prc_add_policies;
--
PROCEDURE prc_drop_policies;
--
--
END APPLY_EUL4_SECURITY;
--
/
---------------------------------------
-- PACKAGE BODY DEFINITIONS
---------------------------------------
--
CREATE OR REPLACE PACKAGE BODY APPLY_EUL4_SECURITY IS
--
--*****************************************************************************
--
PROCEDURE prc_add_policies IS
--
BEGIN
--
-- Apply disc_policy to EUL tables
-- Parameters: discoverer - owner of table
-- eul_versions - table or view name
-- disc_policy - name of policy
-- discoverer - owner of policy function
-- secure_eul - name of function
--
DBMS_RLS.ADD_POLICY ('discoverer', 'EUL4_VERSIONS', 'disc_policy', 'discoverer','secure_eul');
DBMS_RLS.ADD_POLICY ('discoverer', 'EUL4_ACCESS_PRIVS', 'disc_policy', 'discoverer','secure_eul');
....... (add to whatever tables/views you wanted)......


<note from tom again>the above is using VPD also known as fine grained access control. For more information on that, see:
</code> http://asktom.oracle.com/~tkyte/article2/index.html <code>



Rating

  (24 ratings)

Is this answer out of date? If it is, please let us know via a Comment

Comments

runtime business area

Oct, November 11, 2002 - 11:38 pm UTC

Hi Tom
Thanks for great support to all.
Please let us know is it possible to hide Discoverer 4.1 business area and work book from clients/user ,somthing like runtime forms and report in DEv2k.
Other wise after installing module to client side its open to all customers.
Thanks
Oct

Tom Kyte
November 12, 2002 - 10:17 am UTC

I asked Derrick Cameron, my discoverer guru, and he says:

Disco admin grants users and/or roles to business areas. If not granted they don't see it when creating/running workbooks. Same goes for workbooks, although granting in that case is not done in admin, but is done by workbook owner in desktop or sqlplus/java

Implementing a secuirty policy

Navaz, November 19, 2002 - 4:41 am UTC

The Below code from the site
(
http://asktom.oracle.com/~tkyte/article2/index.html

SQL> create function my_security_function( p_schema in varchar2,
  2                                        p_object in varchar2 ) return varchar2
  3  as
  4  begin
  5      if ( user = 'RLS_ADMIN' ) then
  6          return '';
  7      else
  8          return 'owner = USER';
  9      end if;
 10  end;
 11  /

Function created.
In the above Function  i need to include one more condition
how i need to include?
Code shown below filters by business entity(company)
but i still need filter by customers for the same object please explain

create or replace  function my_security_function(p_schema in varchar2,
                                    p_object in varchar2)
                                    return varchar2
as
V_BE VARCHAR2(50);
Begin
   v_be :=  ('HTE-004','HTE');
   v_be := 'BE_ID'||' '||'IN'||' '||V_BE;
    if (user = 'V5100CUBE') then
       return (V_BE);
   elsif (user = 'JOHN') then
        return 'BE_ID = KCT'; 
    else
         return '';

   end if;
 end;
--
begin 
dbms_rls.add_policy 
 ( object_schema => 'V5100', 
 object_name => 'INVENTORY_SERIAL_NUMBERS', 
 policy_name => 'MY_POLICY', 
 function_schema => 'V5100', 
policy_function => 'my_security_function', 
 statement_types => 'select, insert, update, delete' , 
 update_check => TRUE ); 
 end; 
-- 

Tom Kyte
November 19, 2002 - 7:32 am UTC

Just return whatever predicate you need? your code isn't correct it would be:

if ( user = 'V5100CUBE' ) then
return 'be_id in ( ''HTE-004'', ''HTE'' ) ';
elsif ( user = 'JOHN' ) then
return 'be_id = ''KCT'' ';
else
return '';
end if;

if you have something to add like "and company = ..." just add it:

if ( user = 'V5100CUBE' ) then
return 'be_id in ( ''HTE-004'', ''HTE'' ) AND company = <whatever> ';
elsif ( user = 'JOHN' ) then
return 'be_id = ''KCT'' ';
else
return '';
end if;


ashraf

ashraf, November 21, 2002 - 6:22 am UTC

when i use a discoverer with analysis 2 million records with sql that return about 750 records i get a message call not all data is retrived the report will be inacurate

how and why

Tom Kyte
November 21, 2002 - 1:14 pm UTC

Derrick says:

yes. There is a setting that sets the maximum number of rows that can be returned, and when you have an aggregated crosstab query (with page items), Disco will retrieve up to your max, but warns you the aggregations are based on what is available and not necessarily what is in the table

so, how to get the entire thing..

a couple of things... when a summary query is issued to the db, the aggregation is done there. But, it is quite possible that even after the aggregation the number of rows exceeds your limit. This is often caused by the inclusion of a page item (LOV on the top) which drives the detail up. Notwithstanding that, if you do indeed have a lot to display they you can bump up the row limit. It is fairly low in default... maybe 1000, 5000 i don't know. I aways bump up to 50k or 100k - but then there is network issues to consider. It is not practical to view very large volumns of data so I think the approach is sound (setting limits, where processing is done, etc.). If you set a condition, again the filter is set in the query at the db, so that can be used.

Implementiong a security policy

Navaz, November 22, 2002 - 2:23 am UTC

create or replace function my_security_function(p_schema in varchar2,
p_object in varchar2)
return varchar2
as
begin
if ( user = 'V5100CUBE' ) then
return 'be_id in ( ''HTE-004'', ''HTE'' ) ';
elsif ( user = 'JOHN' ) then
return 'be_id = ''KCT'' ';
else
return '';
end if;
end;

begin
dbms_rls.add_policy
( object_schema => 'V5100',
object_name => 'INVENTORY_SERIAL_NUMBERS',
policy_name => 'MY_POLICY',
function_schema => 'V5100',
policy_function => 'my_security_function',
statement_types => 'select, insert, update, delete' ,
update_check => TRUE );
end;



The above functions are created. It’s working fine, But I need to control by session id, how to do it,
We have the Discoverer 4.1.43.07.00 versions, Client server based reports.
While we login to Discoverer user editions connecting by v5100cube, we already control by company using dbms_rls policy ( ''HTE-004'', ''HTE'' ) so all the reports filtering by based on policy. So it’s working fine, but the discoverer session is still open. We are not close that discoverer.

After that we changed the company name (conditions)
( ''HTE-001'', ''HTE-002'' ) then again compile the above my security functions. Now we again open discoverer user edition for another session but connecting same user id (v5100cube). Based on the new condition now all the reports filtering. It’s working fine.

Now two discoverer session is open, our problem is again open the first session to refresh that particular report the filtering conditions is automatically changed by new conditions. How can we avoid this? Is there any way to control by session id in dbms_rls policy? Please explain


Tom Kyte
November 22, 2002 - 7:23 am UTC

I don't see how you would know what policy to apply to which session. What is the difference between these sessions?

If you can answer that -- then you can write procedural logic to return the correct predicate. You should NEVER rewrite the security policy function -- you should have a single predicate policy that returns the correct and proper predicate based on the state of the session.

I think you've missed the point of the predicate policy here. You might want to re-read that paper linked to above. If you are changing the predicate function -- you are doing it very wrong.

Implementing security policy

Navaz, November 23, 2002 - 12:57 am UTC

Hope i have not explained the problem clearly in the previous mail.Now i tried to explain little bit more clear
hopefully,thank you.

Step 1:
Logging into Discoverer user edition with userid : xy and company = 'HTE01'
now the reports are filtered based on the company HTE01 and its working fine.
The above session still remains open.
Step 2:
Opening a new Discoverer user edition with same userid :xy and
different company ='HTE02'
the reports are filtered based on the company and its working fine.

Now the Problem
If i returned to first session of discoverer now the reports are
filtered by the company='HTE02' which is wrong,by right it should
filter based on 'HTE01.

How to control of overlapping of filtering?

Overlapping here means the second session of discoverer
over writes the first session


-- The below function returns the be(company) and based on this discoverer reports filters the report.

create or replace function my_security_function(p_schema in varchar2,
p_object in varchar2)
return varchar2
as
V_BE VARCHAR2(50);
Begin
v_be := ret_be; -- here i am assigning company using function.
v_be := 'be_id'||' '||'in'||' '||v_be;
if (user = 'xy') then
return (v_be); --here company will be returned based on user id
elsif (user = 'pq') then
return (v_be); --here company will be returned based on user id
else
return ' ';

end if;
end;

--the below is used for security policy
begin
dbms_rls.add_policy
( object_schema => 'V5100',
object_name => 'INVENTORY_SERIAL_NUMBERS',
policy_name => 'MY_POLICY',
function_schema => 'V5100',
policy_function => 'my_security_function',
statement_types => 'select, insert, update, delete' ,
update_check => TRUE );
end;



Tom Kyte
November 23, 2002 - 9:34 am UTC

If what you say is true -- then you have a bug in your v_be logic and you are not returning the correct "company".

re-read the above link, get the "debug" package i have there that you can use in your functions to see what they are doing.



Using a password enabled role

GVN, February 05, 2003 - 6:00 pm UTC

Can a password enabled role be used for restricting access so that the user can access the views only through Discoverer and not through any other tool (ex. MSAccess).
If this can be done, how can this be implemented through Discoverer?

Thank you for your valuable advise

Tom Kyte
February 05, 2003 - 6:16 pm UTC

not really -- and why would you limit it to discoverer? seems funky to me. either I can or I cannot access the data in a read only fashion.




Using a password enabled role

GVN, February 06, 2003 - 7:26 am UTC

The reason for limiting it to Discoverer is
with Discoverer you cannot make wrong joins,
with Discoverer you can set up limits on the number of rows retrieved, time of query execution etc.
If the user uses someother tool like MSAccess, it is possible to set up wrong joins/queries therby slowing down performance of the database.


Tom Kyte
February 06, 2003 - 8:49 am UTC

Oracle9i -- resource manager -- predicative query time estimation. Proactively cancel a query before it starts...


Oracle8i and before -- PROFILES -- limit CPU per call. Reactively kill a query when it is taking too long.


You can do stupid things in DISCO too.

=================================================================


Begin by creating the resource plan. It limits statements to
1 second in duraction for members of the plan...


demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM> begin
2 dbms_resource_manager.create_pending_area;
3
4 dbms_resource_manager.create_plan
5 ( 'est_max_time',
6 comment => 'limit by estimated time demo' );
7
8 dbms_resource_manager.create_consumer_group
9 ( consumer_group => 'demo',
10 comment => 'yes it is a demo' );
11
12 dbms_resource_manager.create_plan_directive
13 ( plan => 'est_max_time',
14 group_or_subplan => 'demo',
15 comment => 'its a demo',
16 MAX_EST_EXEC_TIME => 1 );
17
18 dbms_resource_manager.create_plan_directive
19 ( plan => 'est_max_time',
20 group_or_subplan => 'OTHER_GROUPS',
21 comment => 'its a demo' );
22
23 dbms_resource_manager.validate_pending_area;
24
25 dbms_resource_manager.submit_pending_area;
26
27 end;
28 /

PL/SQL procedure successfully completed.

demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM> set echo off
Enter to continue

=================================================================

Lets create that poor end user who is limited to 1 second statements
and assign him to this plan


demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM> drop user low_priority cascade;
drop user low_priority cascade
*
ERROR at line 1:
ORA-01918: user 'LOW_PRIORITY' does not exist


demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM> create user low_priority identified by x;

User created.

demo@ORA920.US.ORACLE.COM> grant connect, resource to low_priority;

Grant succeeded.

demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM> begin
2 dbms_resource_manager_privs.grant_switch_consumer_group
3 ( 'low_priority', 'demo', TRUE );
4
5 dbms_resource_manager.set_initial_consumer_group
6 ( 'low_priority', 'demo' );
7 end;
8 /

PL/SQL procedure successfully completed.

demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM> set echo off
Enter to continue

=================================================================

Now, we need to make the plan active


demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM> alter system set resource_manager_plan = est_max_time scope = memory;

System altered.

demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM> connect low_priority/x
Connected.
demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM>
demo@ORA920.US.ORACLE.COM> set echo off
Enter to continue

=================================================================

Now, we'll create a table, try to select from it and then see
what happens when we attempt a stupid query


low_priority@ORA920.US.ORACLE.COM>
low_priority@ORA920.US.ORACLE.COM> create table t as select * from all_objects;

Table created.

low_priority@ORA920.US.ORACLE.COM>
low_priority@ORA920.US.ORACLE.COM> analyze table t compute statistics;

Table analyzed.

low_priority@ORA920.US.ORACLE.COM>
low_priority@ORA920.US.ORACLE.COM> select count(*) from t;

COUNT(*)
----------
24696

low_priority@ORA920.US.ORACLE.COM>
low_priority@ORA920.US.ORACLE.COM> select count(*) from t,t;
select count(*) from t,t
*
ERROR at line 1:
ORA-07455: estimated execution time (9840 secs), exceeds limit (1 secs)


low_priority@ORA920.US.ORACLE.COM>


Discoverer ASK ?

Sue A, December 10, 2003 - 11:33 am UTC

Tom
your advice is invaluable but you don't want to get loaded down with people asking Discoverer-related questions which Derrick Cameron could answer. Any chance of an Ask Derrick for us poor benighted Discoverer users out here ?

Tom Kyte
December 10, 2003 - 3:51 pm UTC

Derrick works for me -- i forward them on.

Adhoc data browsing

A reader, November 03, 2004 - 12:24 am UTC

This has always puzzled me. We are a small IT shop, with fairly small data volume. Data model is simple, upto 100 tables with a set of user-friendly views on top of them.
Business users need to ask a lot of simple questions of the data. Right now, they all go thru a group in IT who does only reporting, adhoc and more formal. This is getting to be a bottleneck.

How do people out there let loose general, tech-savvy adhoc users to use Oracle? All the Discover demos I have seen are fairly trivial stuff, I need something more complicated than that.

For example, stuff involving stragg, scalar subqueries, scalar subqueries returning more than 1 field (using the various techniques that Tom has demonstrated here), outer joins, etc.

An example of the question in English might be, for all customers living in the NE region and having sales over a million, show the employees who worked that customer, their supervisor, office location. If any customer was the CEO of his company, get some additional information from another child table and so on and so forth.

What kind of user interface would be appropriate for this kind of question?

[Basically, IT is getting swamped with generating these fairly trivial reports and I was wondering if there is a way for power users to do it themselves]

Thanks

Tom Kyte
November 03, 2004 - 7:03 am UTC

you haven't been seeing the right discoverer demo then? it is quite capable of generating hugely complex queries.


for stuff involving the techniques i demonstrate, that reporting tool is called SQLPlus -- you use scalar subqueries in views -- you give the views to end users. You build them an end user layer.

that example would be doable in discoverer -- it is a simple subquery and either two reports (easiest) or an outer join.

instead of watching a demo, you might set up a small project to evaluate the tool(s) -- there are lots.

A reader, November 03, 2004 - 1:49 pm UTC

"you use scalar subqueries in views -- you give the views to end users"

Right, but again that would involve IT department to build view. :-( Thats exactly what I am trying to minimize!

See, what I am asking about is the expressiveness or the UI behind reporting tools. They generally assume a square table/column structure, with some aggregations, pre-defined "measures", and descriptive attributes, etc. The EUL stops there.

Is there a way to build, in a GUI, the queries of the form you typically provide here. Using, for example, scalar subqueries, CURSOR() expressions, CAST/MULTISET stuff, etc, etc?

See, my users know the data model, they know what data to get from where and how to assemble it. They just need a tool that will allow them to express these requirements.

Thanks

Tom Kyte
November 05, 2004 - 10:51 am UTC

think about it for a while, just think about it.

scalar subqueries -- they would be outer joins. they are not "necessary" to express the desired results and can only be used when you actually know what you are doing.

cursor expressions -- they are developer tools, no reporting tool wants or needs them.

cast/multiset -- well, you needed to have run DDL. create type -- it is useless without it.

A reader, November 08, 2004 - 10:29 pm UTC

"cursor expressions -- they are developer tools, no reporting tool wants or needs them"

I always wondered about this. What use are CURSOR() expressions in the real world? Why wouldnt reporting tools want/need them? They facilitate "non-square" result sets. This seems useful for the cases where life is non-square! I mean, embedded parent-child datasets, in-line 1-many results, etc.

1. How are cursor expressions used in real life?
2. Do no reporting tools make use of them, even Oracle's own Discoverer?

Thanks

Tom Kyte
November 09, 2004 - 8:35 am UTC

a reporting tool tends to always print all of the data


A cursor expression like:


select dept.*, cursor( select * from emp where emp.deptno = dept.deptno ) empinfo
from dept;

would allow the client application to get the 4 dept rows back and just "pointers" to the emp information.

If and only if the end user "clicked" on a dept -- would the pointer be derefernced -- the round trip made back to the server and the data retrieved.


A reporting tool wants

select * from emp, dept where ....;


they get all of the data, print it, format it, whatever it. The cursor() thing is nice for client applications that get lots of rows -- but don't dereference many/most of the related bits of data. The cursor expressions aren't executed (don't do IO) until you dereference, or fetch from them.

A reader, November 09, 2004 - 9:18 am UTC

"The cursor() thing is nice for client applications that get lots of rows -- but don't dereference many/most of the related bits of data. The cursor expressions aren't executed (don't do IO) until you dereference, or fetch from them"

Actually, that is really cool. I didnt know this piece. I can see many uses for this. Summary reports with drill-thru links to details, dashboard/scorecard type reports with drill. Each drill-thru link will "dereference" the CURSOR() expression and fetch the data only if needed.

It seems I cant expose a CURSOR expression in a view, so if I do want my reporting tool to use it in the fashion above, how can I go about doing this?

Thanks

Tom Kyte
November 09, 2004 - 9:29 am UTC

you'd have to ask the maker of said reporting tool if they support such a construct and if so -- how.

A reader, November 09, 2004 - 9:33 am UTC

Well, how does (if at all) Oracle Discoverer support this construct?

Tom Kyte
November 09, 2004 - 11:45 am UTC

Discoverer would not generate a query of this style, no.

CURSOR expressions

A reader, November 11, 2004 - 9:41 am UTC

Then I am a little confused. You said that no reporting tool uses/needs CURSOR() expressions. It is a developer tool where the client application can, if needed, "click" on that column and the pointer is dereferenced and data fetched.

But at that point, the client application could just as well issue the query in the cursor expression? CURSOR() cant be encapsulated in a view anyway, so the client application already has the query in it.

How does it matter whether it does

select a,b,cursor(<query>) c

or select a,b
and then issues <query> when the thing is "clicked"?

This is starting to seem more and more like a solution seeking a problem, an answer looking for a question?

Thanks

Tom Kyte
November 11, 2004 - 10:37 am UTC

I don't like applications that issue sql :)

so it is yet another way to hide sql from those applications, pull it back into the server -- where it all belongs.

if you don't like it, don't use it.

(and it does come in handy in XML generation for those non-square result sets too-- could be done with object types, but the cursor expression is nice). also


select * from table( f( cursor( select * from t order by ... ) ) );

is sort of nice -- for ETL and such...

A reader, November 11, 2004 - 12:08 pm UTC

"so it is yet another way to hide sql from those applications, pull it back into the server -- where it all belongs"

But thats what I said, a view is not allowed to have a CURSOR() expression. So, how exactly can you hide the sql from the apps and put it in the server.

A stored proc returning a refcursor is the only way I can think of? Is a refcursor even allowed to have one of its "columns" as a CURSOR expression?

Yes, I agree that using it with ETL and pipelined function is very nice.

Thanks

Tom Kyte
November 11, 2004 - 12:11 pm UTC

ref cursors.

scott@ORA9IR2> variable x refcursor
scott@ORA9IR2>
scott@ORA9IR2> begin
2 open :x for
3 select dept.*, cursor( select ename from emp where emp.deptno = dept.deptno)
4 from dept;
5 end;
6 /

PL/SQL procedure successfully completed.

scott@ORA9IR2> print x

.....

Parameterized view

A reader, November 29, 2004 - 9:01 pm UTC

OK how about parameterized views? The kind you describe in

</code> http://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:12841974988629#12968190422842 <code>

Can Discoverer make use of them?

In general, is there a way to run a stored proc to set some session-scope app context values before running a Discoverer "workbook"?

How about running a stored proc returning a refcursor?

I mean, there *has* to be something that differentiates Discoverer from the other reporting tools out there? The fact that it is a Oracle product should enable it to provide seamless access to all the Oracle-specific features, i.e. tighter database integration?

Thanks

Tom Kyte
November 30, 2004 - 7:21 am UTC

"to all" -- why "to all"

to many more? yes. analytics, Oracle specific syntax in SQL

it is very very aware of those. it is not database independent, therefore it is not afraid to use Oracle'isms.

the parameterized view? that is not an "oracle specific", rather it is more of a "trick", a programming device.


discoverer was designed and intended to build and execute ad-hoc sql. it was not designed and intended to run stored procedures.

A reader, November 30, 2004 - 10:21 am UTC

"to many more? yes. analytics, Oracle specific syntax in SQL
it is very very aware of those. it is not database independent, therefore it is not afraid to use Oracle'isms"

But I just cant see that. Can you show me one example of Discoverer being "very very aware" of Oracle-isms? Using Oracle-specific power features that would differentiate it from the other BI tools out there?

Ok the parametrized view is not a Oracle-ism, call it whatever you want, how can Discoverer make use of it?

Thanks


Tom Kyte
November 30, 2004 - 11:27 am UTC

show me another tool that makes use of any of the 40 some odd analytic functions, or rollup or cube.


If you could "see it" the GUI wasn't done right (well, except you get the answer faster, and you can get "more answers" since things you do with analytics are just sometimes impossible in plain sql)


as I said -- disco is about creating AD-HOC sql, disco is not about running stored procedures. The IMPLEMENTATION technique a developer can use, the trick I call a parameterized view isn't going to be an IMPLEMENTATION technique you use in disco.

A reader, December 01, 2004 - 9:55 am UTC

In

</code> http://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1014464646711#23133907443031 <code>

you asked if Cognos can do

select * from TABLE( cast(your_function(:bind_variable) as yourType ))

and since it cannot, you criticized it by saying

"sorry -- generic tools, that are database independent, mean one thing ..."

Can Discoverer do this? How?

See, I am still trying to see what competitive advantage Discoverer has over the other BI toolsets out there? Being a Oracle product, I thought it would provide access to a richer Oracle-specific featureset like: bind variables, setting app context before running a report, doing a ALTER SESSION before running report, etc. But it doesnt seem to be able do any of these things. And its not as if a RDBMS customer is already paying for Discoverer, it is licensed as a totally new product, so why would any Oracle shop consider Discoverer vs. say Cognos ReportNet? The latter's interface and functionality even in the thin client tool blows Disco out of the water!

Thanks

Tom Kyte
December 01, 2004 - 10:04 am UTC

disco doesn't do user input sql.

all of the things you refer to are "programming tools", not ad-hoc reporting tools.


To "A reader"

Gabe, December 01, 2004 - 5:52 pm UTC

<quote>so why would any Oracle shop consider Discoverer vs. say Cognos ReportNet?</quote>

A fair comparison would be between Oracle Reports and Cognos ReportNet ... both pixel quality reporting tools.

An ad-hoc query tool like Discoverer trades some of the GUI/interface flexibility for, well, the ad-hoc flexibility ... one could argue (and I am) that it gives the business end-user more (than the ability of just running a beautiful but fixed report) with less (bells and whistles).

Apps mode EUL

Sandeep, January 30, 2005 - 8:26 am UTC

Hi Tom,
We have a problem with our Oracle Apps reporting database.
Basically, we recreate it every night from a hotbackup of the production Apps database and open it and re-import a previously exported EUL schema. Obviously, this operation has a lot of failure points and performance dependencies
(backup speed/ recovery speed etc etc).
We are trying to find a way in which we can create a separate database to host our Apps mode EUL and point it towards a Physical standby (using DG) of the Prod Oracle
Apps DB. This way we could cut out the nightly destroy/create procedure of the reporting database... since the EUL schema needs to be read-write it can sit on a separate read-write instance and can connect to the read-only standby copy of the Oracle Apps DB..
The hitch we are having is trying to find a way in which the Apps mode EUL can be separated from the Apps Database!
Any idea? Is DB links/ synonyms a way forward?
(We are using Oracle Apps 11.5.9 and Discoverer 4.1.46
which comes with 9iAS. The database is 9.2.0.5)
Thanks,
Sandeep

Tom Kyte
January 30, 2005 - 9:43 am UTC

<quote>
Obviously,
this operation has a lot of failure points and performance dependencies
(backup speed/ recovery speed etc etc).
</quote>

why is it almost everytime I see "obviously" I get the actual "different feeling"

I don't think that DG is the way forward, introducing dblinks and other things will take you into the realm of 'it is really hard to support you with disco issues'

Why not just put the EUL into apps prod database (but don't use it).
Disk to Disk backup the apps prod instance.
Tape backup the disk image (apps prod database just got backed up lots faster).
Open the disk backup.


(I'm not a disco expert btw)

To Gabe

A reader, January 30, 2005 - 4:14 pm UTC

"A fair comparison would be between Oracle Reports and Cognos ReportNet ... both pixel quality reporting tools...An ad-hoc query tool like Discoverer trades some of the GUI/interface flexibility for, well, the ad-hoc flexibility"

Thats not true. Cognos ReportNet is both an adhoc-query tool and a "pixel quality" managed reporting (canned) environment with the ability to schedule reports. It doesnt sacrifice anything! It is Oracle Reports + Oracle Discoverer and the interface is "sexy"! Oracle Discoverer, in all its incarnations, Java applet, thin client, etc just doesnt feel right in 2005! Its a day late and a feature short. Oracle should stick to its core competency, the database.

Tom Kyte
January 30, 2005 - 5:05 pm UTC

as soon as someone builds a tool that actually uses the database, perhaps.

But as long as they go agnostic, their core compentency isn't writing queries that perform well, that use the product you paid for.

To each their own on the interface, I prefer a browser and nothing much else installed as I move from computer to computer myself. Matter of choice there.

Scheduling Manager

Jay, January 24, 2006 - 5:38 am UTC

Hi, Tom. Great site...First of all, sorry for my bad english!!
I have a question about the Scheduling Manager in Oracle 9i Desktop. I have an user with workbooks, and he needs to schedule workbooks. I give, from Discover Administrator, all the privileges to that user ('Schedule Workbooks', 'Manage Scheduled Workbooks')... Also, I give, after read Discoverer documentation, these privileges:
GRANT CREATE PROCEDURE TO USER_DISC;
GRANT CREATE TABLE TO USER_DISC;
GRANT CREATE VIEW TO USER_DISC;

When the user tried to Scheduling a workbook from database, in the step 2 on the wizrd of scheduling workbook, when click the 'finish' button, appears this error: ORA-01031: insufficient privileges.

Help me, please!!


Tom Kyte
January 24, 2006 - 8:13 am UTC

sorry, I don't have discoverer installed, nor do I use it/administer it.

Ok...

Jay, January 27, 2006 - 3:58 am UTC

Well, at last, I find the grants that the user need to run scheduled workbooks. I give these privileges to the user directly, not to the role:

GRANT CREATE TABLE TO USER;
GRANT CREATE PROCEDURE TO USER;
GRANT CREATE VIEW TO USER;
GRANT SELECT ANY TABLE TO USER;

Thanks anyway, Tom.

Crosstab is not working

sachin, March 16, 2006 - 5:18 am UTC

Hi Tom,

We just installed discoverer 9.0.1 on windows 2k. The crosstab option is not working. Unable to create data point.

Problem disciption: Unable to merge 2 tables. If we select one table remaining tables in the list will be disabled.

Thanks in advance.
Sachin

Tom Kyte
March 16, 2006 - 2:05 pm UTC

please contact support?

More to Explore

Security

All of the vital components for a secure database are covered in the Security guide.