Dave, April 19, 2006 - 4:42 pm UTC
does anyone else when they see this...
"Excepecting an early and excellent reponse."
think wow, thats really rude.
April 19, 2006 - 5:28 pm UTC
I don't know why that doesn't bother me as much as what I call "IM speak" :)
I believe the "expecting an early and excellent response" is definitely a "not a native speaker" thing and I ignore it - they didn't mean it that way likely (I read it as "hey, hope to hear your answer soon - they are always good").
But using "IM speak", given I know they don't teach that when you are learning the language - annoys me no end.
Rude Indeed
A reader, April 19, 2006 - 5:13 pm UTC
Be thankful that people are not (yet) asking Tom to send them money for gracing him with their questions.
April 19, 2006 - 5:36 pm UTC
just a request... let's not take it down this path - I think it wasn't really meant that way...
Force spell check
Pratap, April 20, 2006 - 12:49 am UTC
Why don't you force spell check the " u ", " ur " etc. Unless they are corrected, don't allow the question to be posted!
April 20, 2006 - 7:55 am UTC
Because it is much more fun to poke fun at them when they use "IM speak". It is the little things in life sometimes...
Spellcheck
Frank, April 20, 2006 - 6:33 am UTC
It is quite impossible to check the spelling of posts, since it must be possible to post code as well.
I think repeatingly pointing people to the fact that IM-speak is NOT the preferred language in (technical) forums is the way to go.
(In orafaq.com people often respond in rage when they are pointed to the fact that their posts are hardly readable)
April 20, 2006 - 8:20 am UTC
that and it gives me something to do :)
The use of "u" pre dates IM.
A reader, April 20, 2006 - 9:22 am UTC
Tom,
Before IM became popular I encountered the use of "u" for "you" by people of other cultures several years ago, usually within emails. Much the very same way we still use "BTW", "IIRC", and ":-)" within emails today. While I neither care either way in how you handle the use of "u" for "you" in your ***forum*** I just thought you would like to know its usage may be a matter of "slang" cultural expression not that of IM "speak".
Subject Lost
A reader, April 22, 2006 - 3:39 am UTC
Tom ,
Some how i feel that the subject is lost in "IM".
Please give information about use of HTMLDB
April 22, 2006 - 3:16 pm UTC
read original answer, I said it all there.
"u" and "expecting...", they go together
Tom, April 22, 2006 - 3:56 pm UTC
It's a sign of the times. I'll tell you my needs in as few characters as possible, and you send me the complete solution pronto. I see posts here all the time along the lines of "Tom, your answer was insufficient because, see, I'm still required to do some work". I can't see how some people survive the workplace.
Back to the Topic...
djb, April 22, 2006 - 6:50 pm UTC
I'll just throw in my $0.02
-- Need --
Depends on what you are doing. If you want to make a web-based application, it's a wonderful tool.
-- Scope --
Depends on how sophisticated (complicated) you need to get. I find as I'm developing, I put very little code in HTMLDB (Apex now), and put 99% of my code in packages.
For me, it works well. Reason? My application defines "function points", like "figure out if there are contents in the shopping cart", or "show the discount points, if any, for this particular product" or "save this data and calculate the result". If I don't change the function points in my app, then all I need to do to make changes is to update the package(s) that the app is calling.
I go so far as to not pass any parameters to procedure calls, and for reports, I create views that output *exactly* what I want displayed. My reports' queries look like: "select * from app_vvvvv" (I add a prefix like "app_" to these application-specific views). The code in the view takes care of the rest. That's what I do, and it works for me.
I can only hope that Tom agrees with this philosophy - I'm sure if he doesn't, he'll let us know...
-- Extra Edge --
Once you get the hang of Apex, developing an application is *fast*. If you design your app well, using good database techniques (read Tom's Books!!!), your application will also be *fast*.
-- Learning Curve --
It took me a bit of time to get my head around some of the concepts of Apex. I came from a strong OOP Windows Programming background, only very recently got into browser-based programming, and... well it's just different. It took me much longer to figure out how templates worked than anything. I attribute that to trying to figure out how HTML and CSS worked!
I'm writing fairly sophisiticated programs now in Apex, and loving it. You could say I'm a convert!
Books on HTMLDB
Jagat, April 24, 2006 - 3:09 am UTC
Hi Tom,
Please give reference books for HTMLDB and also then "bigger" ADF.
Thanks in Advance.
April 24, 2006 - 4:27 am UTC
otn.oracle.com has all documentation - for both
djb answer
A reader, April 24, 2006 - 3:21 am UTC
Thanks a lot .. helped in getting some knowledge about HTMLDB
Web Technology and HTMLDB
A reader, April 24, 2006 - 9:12 am UTC
Hi Tom,
What is difference between HTMLDB and Web-Technologies like JSP,ASP etc.
Thanx in Advance
April 24, 2006 - 11:26 am UTC
why would you say it like "between X and Web-Technologes A,B etc" - as if "X" were not a web technology?
HTMLDB (Apex) is a 'web technology' as much as the rest of them. It is a simple declaritive environment that lets you build some pretty complex applications fast.
try it out for yourself, htmldb.oracle.com
IM speak
A reader, April 24, 2006 - 11:02 am UTC
Tom,
I don't know how you feel but I really feel offended if someone other than a close friend writes to me in IM. Once it happened at work. A person, who I knew worked in another division, constantly started using IM in replying to my e-mails. I got so upset that in the next reply, I pointed out to him that IM speak is against professional e-mail communication etiquette. I copied his supervisor on my reply. He stopped.
April 24, 2006 - 11:31 am UTC
I just make fun of them.
... This "u" person, I've never met them. If you know how to contact them, I'd be much obliged as they have a large backlog of work ....
... I'm not sure what German postal codes have to do with anything, PLZ means what exactly? ....
... You do realize your keyboard is in danger of complete failure, it is already dropping many vowels. It must be so hard to type for you ....
It is more fun that way.
EYE-AM
A reader, May 15, 2006 - 12:11 am UTC
u gaaees PLZ dont take it so c-rius-ly. all r so busy that no time to type full words. Key brd is fine no problem.
PlZ take my advice bcos it is good 1.
N joy.
I am just Kidding with EYE-AM . :)
LOLCODE
Andrew, June 07, 2007 - 11:45 am UTC
Hi Tom -
This seems as good a place as any to drop in this tidbit, just for fun:
Have you seen the theoretical specification for the LOLCODE language? "IM Speak" turned into coding syntax. Oddly amusing, and somehow more compelling as code than as generic correspondence. Maybe because programming languages have always been a little cryptic (except PL/SQL, of course).
http://www.lolcode.com/
Upgrade to APEX
Aru, October 28, 2007 - 7:26 pm UTC
Hi Tom,
Our client wants to upgrade htmldb 2 to Apex 3. I'm an oracle dba and have never done this before. The htmldb application is on a separate server as the database(10.2.0.1) it is using. The doc's I am using assume, I think, that the database and the application are on the same server. Am I totally wrong or just havent found the right documentation ?
In short, can the apex application and database be on separate servers ?
Regards,
Aru.
October 29, 2007 - 12:48 pm UTC
Please use the APEX forum on otn.oracle.com to see if such an upgrade is possible first of all.
but your terminology is confusing to me, since the htmldb application runs in a database - it is installed in a database - it cannot be on a machine separate from the server it is running on.
It might be accessing data over a database link, but htmldb is install IN a database.
To Aru
A reader, October 30, 2007 - 7:35 am UTC
Maybe your customer has a separate machine for the application server? All APEX needs is the database, and an application server (AS), that holds the DAD (Database Access Descriptor). The DAD is to be regarded as the gate, which connects the web to the database. All processing is done by (in) the database, the AS streams it to your webbrowser.
In case of an upgrade, you do not need to worry about the Application Server - update the APEX installation in the database, and you are 99% done. By now, existing applications should work.
Not sure if any of the images have changed, or if new ones were added, but you should copy "images" directory of your APEX 3.0 unzipped installation directory to the correct location onto the Application Server (I know, new styles were introduced, and these reside inside this directory).
You can find the physical directory on the AS by looking at httpd.conf, and specifically, looking for a virtual directory called "i" (well, it is the default name - it might have another name), or -if you're lucky- by reading the installation log of the previous install.
apex
A reader, January 21, 2008 - 11:04 pm UTC
January 22, 2008 - 6:36 am UTC
It is javaspeak for a java framework that if you were programming in java you might use.
APEX is sort of like a framework but goes beyond what a "framework" provides. A framework is a way of doing something, a template, a set of rules/practices.
APEX is a development environment that generates navigation, manages state, applies templates for look and feel.
330 times in cache
Reader, February 15, 2008 - 11:22 pm UTC
February 17, 2008 - 7:43 am UTC
oh, I don't think I like this:
CREATE OR REPLACE FUNCTION user_only (
p_schema IN VARCHAR2 DEFAULT NULL,
p_object IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2
AS
BEGIN
RETURN 'ename = nvl(v(''APP_USER''),USER)';
END;
/
I'd rather not call v() like that.... rather set sys_context( 'my_ctx', 'my_user') to that v() value ONCE and just have:
return 'ename = sys_context( ''my_ctx'', ''my_user'' )';
but in any case - the example is "shared sql friendly" as it was written. does your policy function return the SAME string each time invoked or 300+ different strings??
Reluctance to apply effort can not be hidden behing technology
Robert C, February 17, 2008 - 10:27 am UTC
<quote>
But using "IM speak", given I know they don't teach that when you are learning the language -
annoys me no end.
</quote>
While I agree firmly with you on this point Tom, I do believe you are much too soft on this issue. Why should you call it "IM" speak? Name one "IM" application that doesn't support the full A-Z character set?
There is no excuse for writing in a way that doesn't make sense in any language. "thx" is NOT a word. "u" is not a word. Writing in this way is nothing more than plain immaturity.
Some people try to claim that they have to type in that format due to the fast, real time, nature of "IM". This is absolute non-sense and it astonishes me that some people have even the nerve to make such a claim.
February 17, 2008 - 10:41 am UTC
... Writing in this way is
nothing more than plain immaturity. ...
I agree. Whenever I see it - regardless of the format it is delivered in
o email
o Instant message
o SMS (phone text) message
o cover letter on a resume
o technical paper
o whatever
I immediately think the person that crafted it is about 12 years old and I adjust my expectations of them accordingly.
APEX:VPD:300+
Reader, February 17, 2008 - 11:09 pm UTC
This has reference to my post above where I had requested if using sys_context would be better.
To answer your question --
1. This is what I see from my v$sql --
select count(*) from dual where exists (SELECT * FROM user_acc WHERE USER_NAME = :APP_USER AND Function_ID = 537)
select count(*) from dual where exists (SELECT * FROM user_acc WHERE USER_NAME = :APP_USER AND Function_ID = 235)
Do you recommend using cursor_sharing=FORCE will fix this problem.
We can rewrite our policy function if you recommend using sys_context.
I appreciate your help !
Thanks
February 18, 2008 - 7:29 am UTC
1) so your example is NOTHING like the one you pointed me to.
their example - totally bind friendly
your example - not at all bind friendly.
further you wrote:
.. We are getting a lot of duplicate
(300+) statements in cache which is spiking the CPU. ..
but you just posted an example of two UNIQUE (not duplicate) sql statements.
Yes, if you want this to be bind friendly, you will use SYS_CONTEXT to supply the function-id
it is curious your policy is on DUAL - a) dangerous to use count(*) on dual, b) dangerous to put a policy on dual, c) I cannot imagine the usefulness of this approach at all.
Multiple statements
Reader, February 18, 2008 - 7:56 am UTC
We will rewrite it today and let you know the results.
We are also seeing 332 occurences of the following --
begin begin
--If month is null, set to last months month
IF :P51_MONTH is null then
SELECT to_char(sysdate, 'MM')
into :P51_MONTH
FROM DUAL;
END IF;
--If year is null, set to last months year
IF :P51_YEAR is null then
SELECT to_char(sysdate, 'YYYY')
into :P51_YEAR
FROM DUAL;
END IF;
end;
end;
February 18, 2008 - 9:56 am UTC
332 occurrence of that SAME BLOCK - or 332 occurrences where :P51_MONTH is :P52_MONTH and so on.
for the last time, you had no duplication at all - they were all unique.
have you queried v$sql_shared_cursor (search this site for that tablename to see examples) to see what might be causing the non-shared sql.
300+ Statements
reader, February 18, 2008 - 12:27 pm UTC
I appreciate your help .
1. APEX is wrapping the extra code (select count(*) from dual where exists ) around our SQL when we use the authorization scheme.
2. When I do a select from v$sql_shared_cursor the column AUTH_CHECK_MISMATCH has a column value 'Y' .
We need your help now as we don't know what to do next.
Thanks
February 18, 2008 - 2:05 pm UTC
are you using database authentication - so each user logs in as themselves in this case?
300+ statements
Reader, February 18, 2008 - 6:10 pm UTC
We are using one database user .
Every user logs in using their own user.
We then use nvl(v('APP_USER'),USER) to find out his privileges.
The details of the implementation -->
(based upon the document we mentioned earlier from the APEX site)
We have 2 users (A & B)
A owns all the objects.
We grant select on an object to B .
FRom A we create a view in schema B .(ie create or replace view B.emp as select * from emp ).This we execute from user A
Next we apply the security policy (DBMS_RLS) on this view.
Are we doing something wrong ?
We apprecaite your help .
Thanks
February 18, 2008 - 6:49 pm UTC
you said apex is wrapping a select dual where exists
can you be a bit more precise - start over with the offending block and tell me more about it - there is no where exists in it.
you don't have a policy on dual do you?
300+ sql
Reader, February 18, 2008 - 8:11 pm UTC
No we don't have a policy on dual .
We are doing the following --
Application Builder ->Application -> Shared Components -> Security->Authorization Schemes ->
Out of the many Scheme types available we choose "Exists SQL Query"
I hope I have answered your question .
Please let me know if I need to provide any additional information.
Thanks again,
February 18, 2008 - 11:34 pm UTC
please - you mixed "where exists" and "dual" above
what is the PRECISE sql you see 300+ times (the duplicate sql)
re-read your stuff above as if you did not write it, would you be able to follow?
nothing is making sense. You refer to virtual private database, but that would not show up in v$sql...
1. This is what I see from my v$sql --
select count(*) from dual where exists (SELECT * FROM user_acc WHERE USER_NAME = :APP_USER AND
Function_ID = 537)
select count(*) from dual where exists (SELECT * FROM user_acc WHERE USER_NAME = :APP_USER AND
Function_ID = 235)
you have authid mismatches, but it is confused up with the exists stuff.
300+
Reader, February 19, 2008 - 8:15 am UTC
Sorry , I apologize for this mess up.
Let me start again --(we will address one issue at a time)
I am seeing multiple occurences of the following statement when I query my v$sql --
SELECT DEPT_CD LIST, DEPT_CD FROM DEPT WHERE DEPT_CD IS NOT NULL ORDER BY DEPT_CD
v$sql_shared_cursor is telling me that it is auth_check_mismatch .
I hope it better this time.
Thanks for your patience !
February 19, 2008 - 4:57 pm UTC
is dept the table that has the VPD function on it, the one that returns LITERAL sql?
that will absolutely do that, you have UNIQUE sql (you just cannot see it)
ops$tkyte%ORA10GR2> create or replace
2 function my_security_function( p_schema in varchar2,
3 p_object in varchar2 ) return varchar2
4 as
5 l_val number;
6 begin
7 select s.nextval into l_val from dual;
8 return 'n = ' || l_val;
9 end;
10 /
Function created.
ops$tkyte%ORA10GR2>
ops$tkyte%ORA10GR2> create table t ( n int );
Table created.
ops$tkyte%ORA10GR2> begin
2 dbms_rls.add_policy
3 ( object_schema => user,
4 object_name => 'T',
5 policy_name => 'MY_POLICY',
6 function_schema => user,
7 policy_function => 'My_Security_Function',
8 statement_types => 'select, insert, update, delete' ,
9 update_check => TRUE );
10 end;
11 /
PL/SQL procedure successfully completed.
ops$tkyte%ORA10GR2>
ops$tkyte%ORA10GR2> select /* look for me */ * from t;
no rows selected
ops$tkyte%ORA10GR2> select /* look for me */ * from t;
no rows selected
ops$tkyte%ORA10GR2> select /* look for me */ * from t;
no rows selected
ops$tkyte%ORA10GR2> select /* look for me */ * from t;
no rows selected
ops$tkyte%ORA10GR2> select /* look for me */ * from t;
no rows selected
ops$tkyte%ORA10GR2> column sql_id new_val sql_id;
ops$tkyte%ORA10GR2> select sql_id, sql_text from v$sql where sql_text like 'select /* look for me */%';
SQL_ID
-------------
SQL_TEXT
-------------------------------------------------------------------------------
7w1x42z9gvjp8
select /* look for me */ * from t
7w1x42z9gvjp8
select /* look for me */ * from t
7w1x42z9gvjp8
select /* look for me */ * from t
7w1x42z9gvjp8
select /* look for me */ * from t
7w1x42z9gvjp8
select /* look for me */ * from t
7w1x42z9gvjp8
select /* look for me */ * from t
7w1x42z9gvjp8
select /* look for me */ * from t
7w1x42z9gvjp8
select /* look for me */ * from t
7w1x42z9gvjp8
select /* look for me */ * from t
7w1x42z9gvjp8
select /* look for me */ * from t
10 rows selected.
ops$tkyte%ORA10GR2> select auth_check_mismatch from v$sql_shared_cursor where sql_id = '&SQL_ID';
old 1: select auth_check_mismatch from v$sql_shared_cursor where sql_id = '&SQL_ID'
new 1: select auth_check_mismatch from v$sql_shared_cursor where sql_id = '7w1x42z9gvjp8'
A
-
N
Y
Y
Y
Y
Y
Y
Y
Y
Y
10 rows selected.
AUTH MISMATCH
READER, February 19, 2008 - 5:19 pm UTC
YES !
How do we fix this issue ?
Thanks !
February 20, 2008 - 8:12 am UTC
BY USING SYS_CONTEXT - what we talked about ABOVE
using sys_context
Reader, February 20, 2008 - 12:08 am UTC
If I use sys_context I can see the number of executions going up and no more child cursor .
Will this be the correct approach ?
Thanks a lot !
February 20, 2008 - 8:18 am UTC
if the goal is to decrease the non-shared sql - yes.
Logon trigger
READER, February 20, 2008 - 7:12 am UTC
How will we execute the pl/sql code to set the value in the context ?
Is database logon trigger the only approach ?
Thanks
February 20, 2008 - 9:29 am UTC
In fact, it would not work. APEX uses a connection pool, the logon happens ONCE.
Use a pre-page bit of code, pop the value into the context.
To "READER from US"
Joel, February 25, 2008 - 10:15 pm UTC
Will APEX remain free in the future?
Fernando, March 27, 2008 - 11:26 am UTC
I find APEX an extraordinary rapid development tool, but
management is very reluctant to use a product that eventually could be charged by Oracle.
Yes, I can throw some numbers about man-hour saved by using APEX but management has a firm policy of reducing hardware/software costs.
Can you imagine another way to convince management to use APEX? I mean, how can assure them that APEX will remain free for oracle database owners?
Thank you
March 27, 2008 - 1:54 pm UTC
.... quote with modifications .....
I find SQL an extraordinary rapid development tool, but
management is very reluctant to use a product that eventually could be charged
by Oracle.
...............
I know of no pre-existing "for free" feature that became "for fee"
I know of many existing "for free" features that started as "for fee", but not the other way around (eg: sqlplus, row level locking, plsql, objects, java stored procedures - all started as "options" that we just take for granted now)
Free/Fee
Greg, March 28, 2008 - 10:57 am UTC
Tom,
I thought that back in the 8i days, Partitioning was free in the Enterprise Edition, but an option in Standard Edition. Now it's extra cost everywhere.
Is my memory fading?
March 31, 2008 - 7:32 am UTC
Yes, it is fading.
Standard Edition has no options
Options are only available with the enterprise editions - you cannot get an option with standard (ever).
Partitioning has always been a for fee option to enterprise edition.