Wednesday, December 1, 2010

Multi Org Security, Diagnostics Security and Application Appearence via Profiles

While using multi org application assigning profiles are critical at responsibility level;
MO: Operating Unit
MO: Default Operating Unit
HR:Business Group
HR: Security Profile
GL Ledger Name
GL: Data Access Set
MO: Security Profile (If MOAC is going to be used then a security profile should be created via HR and this profile should be set. If this is set then MO: Operating Unit is disregarded)

Normally Diagnostics on Forms require Apps password though in test or development environments this may cause problems. To make Diagnostics available for every user "Utilities:Diagnostics" profile can be set.

When an unexpected error occur in OAF screens, details of the error gives reason. To access to the details of error "FND: Diagnostics" profile should be set.

Changing the applications look and colour is possible. Especially differentiating test, dev and prod environments may prove very useful, to provide that "Java Color Scheme", "Java Look and Feel" profiles can be used.

Debugging Code

To debug a code there are advanced techniques but in basic cases dbms_output package can easily be used; it provides procedures to enable buffering, to create output and to retrieve the output; enable, put_line, get_line.

BEGIN
dbms_output.put_line('Debug test');
END;
/

This output is created in buffer though if wanted output can be written to a table.

iProcurement item prices

iProcurement can get item prices from different locations; inventory>items>master items>list price, purchase agreements, price lists or items' cost information.

Cost information is used for internal requisitions and it is derived from destination organization's item cost. Cost tables are; cst_item_costs, cst_item_cost_details and cst_item_cst_dtls_interface .

It is optional that whether users can or can not override the default requester. To determine that a profile is used; "ICX/POR: Override Requester" which can be limited to user only, users within the same personnel organization (HR Organization) or users within the same business group.

Tuesday, November 30, 2010

Selecting some part of a text by using substr, instr

To take characters beginning from 3.:
select substr('This is a test', 3) from dual :"is is a test"

To take 2 characters beginning from 3.:
select substr('This is a test', 3, 2) from dual :"is"

To count characters till a character:
select instr('This is a test', 's') from dual : "4"

Of course using the combination of substr and instr is possible; To take characters beginning from a character;
select substr('This is a test', (select instr('This is a test', 's') from dual)) from dual : "s is a test"

Friday, November 26, 2010

AME: Approval Management Engine

To change approval workflows AME (Approval Management Engine) can be used. It provides variable options to change workflows without dealing with coding. Some seeded workflows are designed to work with AME though some are not and custom workflows can be designed compatible too. I think this is an essential property for new workflows to be manageable.

"The purpose of Oracle Approvals Management (AME) is to define approval rules that determine the approval processes for Oracle applications.
An approval rule is a business rule that helps determine a transaction's approval process. Rules are constructed from conditions and actions. For example an approval rule can be as follows:
If the transaction's total cost is less than 1,000 USD, and the transaction is for travel 1-2 Oracle Approvals Management Implementation Guide expenses, then get approvals from the immediate supervisor of the person submitting the transaction.



The approval rule's if part consists of zero or more conditions, and its then part consists of one or more actions. A condition consists of a business variable (in AME, an attribute) and a set of attribute values, any one of which makes the condition true. An action tells AME to modify a transaction's approval process in some fashion. The conditions in the sample rule in the graphic refer to two attributes: the transaction's total cost, and the transaction's purpose. The sample rule's action tells AME to add the requestor's supervisor to the transaction's approver list.
AME enables you to define rules that express a wide variety of approval rules. For example, rules that:
• Require subject-matter-expert approval
• Require managerial approval
• Create exceptions for rules requiring managerial approval
• Substitute one approver for another in special cases
• Revoke a manager's signing authority in special cases
• Grant a manager extra signing authority in special cases
• Generate a production that assigns a value to a variable name such as the value
digital certificate to the variable name eSignature."

"AME responsibilities in 11i.AME.A are assigned directly to the users. However, In R12 or 11i.AME.B and higher, AME responsibilities are assigned indirectly to users through roles. The roles are assigned to the users by the SYSADMIN user using the User Management responsibility. Once the roles are assigned, the AME responsibilities are automatically available to the users without specifically assigning the AME responsibilities to the users." (User Guide) That means responsibilities should not be added to users manually!
AME grants are given by using Functional Administrator responsibility> Grant screen.

EBS responsibility to create AME conditions and rules: Approval Management Business Analyst.

Workflows can work with or without AME, for example in Purchasing module this can be done via setting Approval Transaction Type in Document Types screen.

Approvals Management Implementation Guide should be seen for more information.

Application Developer

Application Developer responsibility can be used for some useful transactions, information;

Registering application, form, function can be done; Application>Register, base path of applications can be seen (PO_TOP etc)
Info about tables can be seen: Application>Database>Table
Lookups can be searched from some modules though they do show all. To search in all lookups Application>Lookups>Application Object Library

Oracle Applications Manager

Some useful transactions, information are possible with System Administrator>Oracle Applications Manager

Notification Mailers, background engines, agent listeners can be started.
Licensing is done via License Manager (Compiling forms, applying pathes requires Applications to be Licensed).
Applied patches can be seen via Oracle Applications Manager>Patching and Utilities
Applications on the database and their platform infos can be seen (to apply patches, to open Service Request etc.) via Oracle Applications Manager>Hosts
Purging logs etc can be done.
Can be used to search for concurrents.

Budget control

When an organization uses budget control, in exceptional cases overriding the budget control is required. For this need "Budgetary Control Group" profile can be assigned to responsibility or user. Authorithy provided this profile can be modified via general ledger>budgets>define>control.
GL>Setup>Accounts>Summary and Value Set>Rollup Group should also be used when budget control need is hierarchical.

Friday, November 12, 2010

How to learn application address via database? and vice versa

When you are connected to a database, you can see the applications running on it.

"select host, domain from FND_NODES" and take port number from your tnsnames.ora. To see which nodes are active support_cp, support_forms, support_web, support_admin columns can be checked.

Here is your application address:
http://host.domain:"8000+(portnumber-1521)"

When you are connected to application and have system administrator responsibility you can see the database connection info;

system administrator>Oracle Applications Manager>Dashboard

here your tns info:

"nameyouwant"=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST="host.domain")
(PORT="(x-8000)+1521")
)
(CONNECT_DATA=
(SID="Applications System:")
)
)

x: Application address no
Note: Remove the " signs

Access violation error for Toad

Using 10g client is required if you are connecting to 10g database; Toad gives "Access violation..." error when your computers anvironment is not using it. Required steps are: My computer> properties>advanced>enviroment variables and changing the path as your path of 10g client (Ex: C:\oracle\product\10.2.0\client_1)

Registering Table - Column

Flexfields (tables validated value set ) , alerts and audit search for registered tables so if custom tables are wanted to be used they and their columns should be registered. Registration is done by using AD_DD package, details are in EBS Developer's Guide> Table Registration API

Basic AIM tasks

List of mostly used AIM tasks:

BP.080 Develop Future Process Model
BR.100 Define Applications Setup
MD.050 Create Application extensions functional design
MD.070 Create Application extensions technical design
DO.070 Publish user guide
DO.080 Publish technical reference manual
TE.010 Define testing requirements and strategy

Opening multi user accounts via Explorer

Especially when testing some cases logining to application with more than one user is required. Opening more than one explorer were enough but new versions of Explorer detects the newly opened page and updates the old one's login information. By properties> writing "-no merge" to the end disables that property and gives the chance of logging in with more than one user.

Forms vs OAF

I wonder in which cases Forms should be used in which cases OAF should be used? After a research i see that forms work on a client and OAF (Oracle Application Framework) is claimed to have less coding effort (mostly because of reusable codes), low cost. On the other hand there is a R11 - R12 reusability subject of these developments; Jdeveloper (OAF) for R11 is not supporting R12 and Jdeveloper (OAF) for R12 is not supporting R11 either. Though Forms Builder6 for R11 is not supporting R12 but Forms Builder10 for R12 supports R11.
One more face of the subject is user friendliness; OAF pages does not require anything but a browser though Forms requires specific Java version installed. Therefore if too many users will use the screen or users will access to the screen from uncontrollable computers then using OAF seems to be a better solution.

Indeed i learnt that new question is OAF versus ADF (Oracle Application Development Framework). ADF is a part of next generation Fusion Middleware but Fusion Applications is still in darkness. ADF can be used for EBS also but not officially supported and does not carry the advantages of OAF for R11 and R12. As a result OAF is suggested for new developments for being html based and being expected to be easily transformable to use in Fusion Applications.

How to modify data selected in notifications

First thing to do is finding workflows name:wf_item_type; standard workflows writes wf_item_key and wf_item_type to the standard tables or from application purchasing>document types>w_item_type can be seen for workflows. Then via workflow builder>wf_item_type>notifications>messages>body related variable can be seen. Another way is directly searching in related package by finding activity and procedure names in workflow status monitor.

Reaching database over EBS

Reaching database over EBS with apps user though you do not have the password! It certainly creates high level of security risk. I will get more detail about it if i can; how to do and how to prevent? While database passwords are controlled strictly this is not easy to decipher. After required establishment all you need to do is (any button combinations developer defines, in the case: ctrl+shift+F7 + ctrl+shift+F8) in the right form..

Thursday, October 21, 2010

Required checks before going live

Going live is a critical phase for IT projects, if it is not managed carefully all efforts until then can be wasted. Here is some objects need to be controlled for Oracle projects while transferring developments from test environment to production environment

Application Objects:
Form,
function,
menu,
responsibility,
role,
grant,
lookup,
value set,
descriptive flex field (segments),
key flex field (segments),
concurrent,
program,
executable,
request group,
profile option,
personalization,
folder,
report (xml, discoverer)

Database Objects:
Function,
workflow,
procedure,
package,
view

Also while airing upgrade projects; workflows should be tested if past flows are still working fine though workflow has versioning system

Monday, October 11, 2010

Clearing Cache via Functional Administrator

Sometimes changes seem to be not applied to EBS, reason for this is cache. Clearing cache solves the problem most of the time (such as adding a responsibility and not seeing it);
Functional Administrator>Core Services>Caching Framework>Global Configuration>Clear All Cache

Running XML Report in Local Environment

Oracle Report Builder is used for creating XML reports, after creation of the report sometimes changes need to be done while there is no connection to the environment. In such cases .rtf file can be downloaded via XML Publisher Administrator and .xml file can be downloaded via view>requests>diagnostics>xml (after running the report) to change and see the result in local environment. To be able to do this BI Publisher Desktop needs to be installed as an add-in to the MSWord. First .rtf file is
opened then Add-Ins>Data>Load XML Data>Preview>report type steps should be followed to see the report result

Useful tables for database management and patches

When you wonder where a column or code is used you can use the following query!

select * from all_source
where upper(TEXT) like '%%',

Also a few useful tables are listed below:

-dba_db_links
-dba_tables
-v$database

Useful tables for patch information whether it is installed or not:
ad_bugs, ad_applied_patches

From ETRM:
"AD_BUGS holds information about the various Oracle Applications bugs whose fixes have been applied (ie. patched) in the Oracle Applications installation

AD_APPLIED_PATCHES holds information about the "distinct" Oracle Applications patches that have been applied. If 2 patches happen to have the same name but are different in content (eg. "merged" patches), then they are considered distinct and this table will therefore hold 2 records."

Thursday, October 7, 2010

DFF Column Register

Table Attribute columns can be used in Descriptive Flex Fields (DFF) via Application Developer> Flexfield> Descriptive> Segments and searching related DFF title. Though related table's other columns too can be used in descriptive flex fields via registering (Usually global attributes). To register a column required steps are: Application Developer> Flexfield> Descriptive> Register, querying the DFF and Columns> flagging the column. This form can be used to find the DFF Title by using the table name.

Different types of columns may exist if you query the Flexfields with a database table; one of them is the one which we normally use, the other one is the one which reserved for global use. If a column exist in the table but not shown in normal flexfield record screen it means that the attribute is probably reserved for global use. If you want to use it you should uncheck it in the localization record.

Note1: When a user click on the flexfields they may open otomatically or user need to press "CTRL+L", this option is provided with "Flexfields:Open Descr Window" and "Flexfields:Open Key Window" profiles.

Note2: Serial Attributes definition is a special case; it is done within Warehouse Manager responsibility> Serial attributes screen.

Alert History

I have learned that alerts which are runned by Oracle Applications Alert Manager are being logged, alerts' running times and outputs can be seen via following query

select * from ALR_ALERTS al, ALR_ALERT_CHECKS alc, ALR_ALERT_OUTPUTS alo
where al.alert_id=alc.alert_id
and al.alert_id=alo.alert_id
and al.alert_name like '%'
order by alc.last_update_date desc

Tuesday, September 28, 2010

Forms Link to Discoverer

When a discoverer report is done users access it via Discoverer Desktop or Discoverer Plus. Access to Discoverer Plus can be via an external
address or via a link within the Oracle, providing direct link from Oracle Applications is a user friendly approach.. To provide the link
firstly a function should be defined via application developer>application>function cells should be defined as Function:"Function_Name", User Function Name:"User_Function_Name","Type:"SSWA jsp function", Mode:"mode=DISCO&Plus=Y",
HTML Call:"OracleOasis.jsp" and Object:"Others". Then this function should be assigned to the wanted Menu.

Forms attachments

Users want to be able to attach files to some standard Forms or custom Forms and sometimes functional consultants provides this.
Firstly table, function, block names and primary key information should be collected for the Form.
Then application developer>attachments>document entities record should be created for the table
After that application developer>attachments>attachment functions categories, blocks and entities datas should be recorded. (Any standard form providing the attachment specialty can be used as an example for the records)

Named SQLs

Here are my useful - named SQLs for TOAD..

DBA objects

select * from dba_objects d
where 1=1
and D.OBJECT_NAME like '%%'
--and D.OBJECT_TYPE='TABLE';

Locked session

select * from v$session where lockwait is not null;

alter system kill session 'SID,SERIAL';

R12 security

exec MO_GLOBAL.SET_POLICY_CONTEXT('S',101);

Set schema

alter session set current_schema=APPS;

User Responsibilities

select user_name, responsibility_key
from apps.fnd_user fu , apps.fnd_user_resp_groups_direct rs, apps.fnd_responsibility rsp
where fu.user_id=rs.user_id
and rs.responsibility_id=rsp.responsibility_id
and user_name like '%'

User initialize

begin
apps.fnd_global.apps_initialize(user_id=>1092,resp_id=>50732,resp_appl_id=>20003);
end;

Table columns, Forms

Here are some useful tables, views and queries to find tables which contains a certain column or forms which contains a certain personalization action or a form's user name etc.

ALL_TAB_COLS
FND_FORMS_CUSTOM_RULES
FND_FORMS_CUSTOM_ACTIONS
FND_FORM
FND_FORM_TL

select table_name, column_name, data_type, data_length, qualified_col_name from ALL_TAB_COLS

select function_name, description, trigger_event, rl.sequence, rl.enabled, form_name, act.enabled
from FND_FORM_CUSTOM_rules rl, FND_FORM_CUSTOM_ACTIONS act
where rl.id=act.rule_id

select f.application_id, f.form_name, ft.language, ft.user_form_name, ft.description
from FND_FORM f, FND_FORM_TL ft
where f.form_id=ft.form_id

Calling an API

An R12 customer wanted to update supplier contact email addresses so i found an API and needed to call it. Below is the written code for this customers need:

create or replace procedure apps.xxxt_vendor_email_update
is
l_vendor_site_id number;
l_commit varchar2(4000) := FND_API.G_TRUE;
l_validation_level number := FND_API.G_VALID_LEVEL_FULL;
x_return_status varchar2(4000);
x_msg_count number;
x_msg_data varchar2(4000);
cursor c_import
is
select *
from xxxt_tedarikci_mail
where 1=1
-- and tedarikci_no='11316';
begin
for r_import in c_import
loop
if (r_import.vendor_name!='ASDF')
then
begin
select vendor_site_id--, aps.vendor_name, vendor_site_code, aps.segment1, aps.vendor_id
into l_vendor_site_id
from ap.ap_suppliers aps , ap.ap_supplier_sites_all apss, xxxt_tedarikci_mail xtm
where aps.vendor_id=apss.vendor_id
and aps.segment1=xtm.tedarikci_no
and xtm.tedarikci_no = r_import.tedarikci_no
and apss.org_id=83
--and aps.vendor_id!=179005;
exception when others then
update xxxt_tedarikci_mail
set error_message = r_import.tedarikci_no
where tedarikci_no=r_import.tedarikci_no;
end;
else
begin
select apss.vendor_site_id
into l_vendor_site_id
from xxxt_tedarikci_mail xtm , ap.ap_supplier_sites_all apss
where 1=1
and APSS.VENDOR_SITE_CODE = xtm.vendor_site_code
and xtm.vendor_site_code=r_import.vendor_site_code
and XTM.E_MAIL is not null
and apss.org_id=83;
exception when others then
update xxxt_tedarikci_mail
set error_message = r_import.tedarikci_no
where tedarikci_no=r_import.tedarikci_no;
end;
end if;
AP_VENDOR_PUB_PKG_w.update_vendor_site(
p_api_version => 1.0
, p_init_msg_list => fnd_api.g_false
, p_commit => fnd_api.g_true
, p_validation_level => l_validation_level
, x_return_status => x_return_status
, x_msg_count => x_msg_count
, x_msg_data => x_msg_data
, p7_a0 => null
, p7_a1 => null
, .
, .
, p7_a94 => r_import.e_mail
, .
, .
, p7_a154 => null
, p_vendor_site_id => l_vendor_site_id
);
end loop;
end;

Friday, September 24, 2010

Form Personalizations: Custom Menu, Changing LOV, Exporting Hidden Canvases

Creating a custom menu to call another form;
In R12 adding new menu(button) under Tools is quite easy. Selecting Action Type as "MENU" and then assigning a menu-special (one of the first 15) is enough. Though to start another action via this button, one more personalization is required which has the assigned menu as trigger event.

Changing LOV using Forms Personalization requires 2 actions:
1- Builtin> Builtin Type:Create Record Group from Query, Arguments:"your select", Group Name:"your select's name".
2- Property> Object Type: LOV, Value:"your select's name"
Selecting the exact columns for the LOV is critical; for example to change a lookup code, "lookup_code" should be selected besides "meaning"

Exporting hidden canvases;
Lets think of a case you want to export purchase order lines including the information in "note to supplier". Because of being under a different canvas exporting the same line twice is the solution. But there is a personalization for this (starting with R12):
when new form instance
object type: block
target object: line
property name: export hidden canvases
values : true

Note: For form personalizations using a database value or using a form value both possible! Example of usage for a forms value ":po_lines.attribute1", for a database
value: "${item.po_lines.attribute1.database_value}" and of course a query can be written to use the database value.

Monday, September 6, 2010

Integration repository

I-repository is a useful source to find out information about interfaces, api s. It has a catalog structure to find the source needed in addition to search tool. It was downloaded externally or could be reached at "irep.oracle.com/index.html" before R12. In R12 EBS it is included in the application via a responsibility named 'Integrated SOA Gateway'

Forms usage shorcut

In e-business suite using forms effectively via shortcuts saves important time, especially underlined letters are very useful. First; pressing 'Alt'+ 'underlined letter' then only 'underlined letter' can increase usage speed observably

Connect by, floor(), round()

Standart sql remains insufficient sometimes, Oracle develops new functions, clauses to solve these in time, here is some;
"connect by prior" clause can be used to select hierarchical information from parent-child related tables. "connect by level" clause can be used to multiply the line count.

"floor" rounds the number to the closest integer lower than itself:
select floor(3.6) from dual
"round" rounds the number to the closest integer though it provides options:
select round(3.6) from dual
select round(3.4) from dual
select round(111.444 , 1) from dual
select round(111.444 , -1) from dual

Wednesday, September 1, 2010

Query performance

Query performance and optimization is not always being regarded as an important issue, but most of the time it is. Cost of query may not show difference in startup stages of a system but in the long term it affects system performance significantly. So while creating a view, discoverer report or forms select, costs should be evaluated and optimized. First thing to do in selects is finding right columns to match (usually primary and foreign keys) and using indexes if exist. If not exist creating an index may affect dramatically. Using numbers while matching tables, using sub queries, avoiding full table scans are other tips to remember. Also using SQL instead of PL-SQL may reduce time because it saves the time database requires for transacting in PL-SQL mode.
In Forms design there is a difficult but useful option; folder structure. It provides better functional qualifications in addition to better performance provided by its query method.

Monday, July 19, 2010

Personalization transfer

This subject can be divided to two subtitles: OAF personalizations, Forms personalizations.

To transfer OAF personalizations "Functional Administrator" responsibility is used.
"FND: Personalization Document Root Path" profile should be set.
personalizations>import/export then search and export the personalization.
Login to linux and go to the profile directory, use "tar –cvf xxPersonalizations.tar ./*"
Transfer files via FTP to destination.
Login to linux and go to the profile directory, use "tar –xvf xxPersonalizations.tar *****"
personalizations>import/export then search and import the personalization.


To transfer Forms personalizations FND Load is used.
To download rules for a particular function: FNDLOAD /
0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct
FND_FORM_CUSTOM_RULES function_name=
To download rules for a particular form: FNDLOAD / 0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct FND_FORM_CUSTOM_RULES form_name="form_name" To download all personalizations (all forms and functions): FNDLOAD / 0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct FND_FORM_CUSTOM_RULES Upload: FNDLOAD / 0 Y UPLOAD $FND_TOP/patch/115/import/affrmcus.lct

Note: These are not tested by me.

Monday, July 5, 2010

Sum over partition, invalid number

Discoverer reports rearrange the views you create and add new rows to the original "select" for calculations, sums vs. I needed to have a sum calculation in the original sql have the wanted results. So for the first time i used "sum over partition" , example code to sum "column1" for every "column2" change is : select sum (column1) over (partition by column2) from table. If wanted running (cumulative) sum also can be calculated.

SQL have a classic "invalid number" error yet more sometimes Discoverer gives this error though sql does not. Especially while using flexfields number problems occur, usually depending on language (like "." and "," discrepancy). The statement to solve this problem is: fnd_number.canonical_to_number (column1)

Creating a new profile

Sometimes custom solutions are needed for customer requests and profiles are important part of these solutions. Sometimes in personalizations, sometimes in database variable values are needed for different users, responsibilities, organizations vs. And profile is a cure for that, the path to create a new profile is: application developer> profile

Friday, June 18, 2010

Value Sets vs Lookups

I was using independent value sets for every need for value lists. A few days ago i learnt that using lookups for value lists are more cost effective because it is using one table to store data though value sets are using two tables.
Then a question emerged: when to use value sets? When we need dependent values, when we need to use selects from tables, when we need to list long values etc. Also there is advantage of validation for Value Sets; with special and pair validation types value set validation can be changed depending on the transaction type: insert-update, edit, query etc.

Query on Oracle Forms

Searching in the Oracle EBS forms was simple and straightforward for me until last week.
I have learned two ways to increase search capabilities in the forms:
1- Press f11 to turn on the query mode, help>diagnostics>examine then you
can select any field which you know and doesnt seem on the form screen (such as id) then press ctrl+f11...
2- In query mode you can query by conditions like "<,>, is (not) null". Firstly type "#", secondly your condition then execute the query with ctrl+f11 ...

Audit table

Last week i have learned that Oracle gives you the chance of tracking changes of tables you want. Whenever a change
occurs for the columns you selected, it creates a record. It seems to be a very
useful feature. It is kind of technical staff though steps to implement are easy and
functional:
AuditTrail:Activate profile should be set to 'Yes'
system administrator>security>install enable audit for your oracle username
system administrator>security>groups create an audit group, define the tables in the group. (Custom tables should be registered to be listed here)
system administrator>security>tables columns, desired to trail, should be selected.
AuditTrail Update Tables concurrent should be run.
After the concurrent a new table should have been created, which has "_a" after the original table name.

Thursday, June 3, 2010

Outer join use

Normally SQL does not allow to use a table with more than 1 outer join (+), how to solve the problem is a mystery for me. Previously i have read that ANSI code could be used for this though i haven' t use it yet. Today i have seen a discoverer report which uses some selects as tables to avoid outer joins and unions. Writer of the report says it also improves the performance, i will try it when the time arrives...

Monday, May 31, 2010

A use of "case when" and useful convert SQLs

My first use of "case when" sql command. I needed to write an alert and the alert needed to be tested. Also test mail server was not working. So i replaced original e-mail addresses with our email addresses via "case when".
Example:
select email_address
case
when email_address = 'aaa' then 'bbb'
else 'ccc'
end

ABS returns absolute value of a number like
select ABS(-1) from dual : "1"

To extract day, month or year from sysdate we can use following:
select extract(day from sysdate) from dual
To select day, month or year from sysdate plus or minus some months we can use following:
select extract(year from add_months (sysdate,24)) from dual

To restrict the SQL with an aggregated condition "where" clause can not be used, "having" can be!
select po_header_id
from po.po_lines_all
where creation_date > sysdate -30
and sum(unit_price) > 1000
group by po_header_id
Generates "ORA-00934: group function is not allowed here" error.

Though following query works:
select po_header_id
from po.po_lines_all
where creation_date > sysdate -30
having sum(unit_price) > 1000
group by po_header_id

What, Why?

Being an Oracle functional consultant requires deep understanding of system analysis, knowledge of technical fundamentals beside Oracle E-Business Suite. This blog mostly consists of tips, information which a functional consultant needs time to time.

With the things we learn we become more overlooking to the job though some of it is forgotten in time. After more than a year in this job i feel a need to materialize my knowledge. So writing the things which attracts my attention will help me to keep track of my learnings. I believe information here will help me in my future projects and being able to see my learning process may inspire me and readers of this blog...