Cascading dependencies

i read some about the term 'cascading dependencies' which packages eliminates??? but what is that???
and speaking about packages, is it true that i cannot call a procedure in a remoter database using db links if that particular procedure references a packaged variable???
and what are global variables in a package??? where are they declared in spec or body???

Hi,
Cascading dependencies i will explain you latter. i have to check once.
Regarding your query:
is it true that i cannot call a procedure in a remoter database using db links if that particular procedure references a packaged variable???
It is written very clearly in restrictions on packages that :
You cannot reference remote packaged variables directly or indirectly. For example, you cannot call the following procedure remotely because it references a packaged variable in a parameter initialization clause:
CREATE PACKAGE random AS
seed NUMBER;
PROCEDURE initialize (starter IN NUMBER := seed, ...);
Also, inside a package, you cannot reference host variables.
Regarding your second question :
what are global variables in a package??? where are they declared in spec or body???
Global variables are always defined in specification of a package and advantage of using global variable is that use can use that variable in any where in your application by using package_name.variable_name. They are simply any variable defined in the specification of the package. But Some issues like persistent state has to be keep in mind.

Similar Messages

  • Advantage of a package???

    hi,
    is is very well know that packages help in performace improvement, that is when a package member is referenced, all the package's contents are loaded into the memory, but how long are they stored??? is a LRU algorithm used or does it stay in the memory till that particular session is terminated??? its urgent kindly reply as soon as possible???

    Hi,
    According to oracle documentation :
    When you call a packaged subprogram for the first time, the whole package is loaded into memory. So, later calls to related subprograms in the package require no disk I/O. Also, packages stop cascading dependencies and thereby avoid unnecessary recompiling. For example, if you change the implementation of a packaged function, Oracle need not recompile the calling subprograms because they do not depend on the package body.
    Yes, its true that LRU is used for package swaping. But you can stop it also.
    According to oracle documentation:
    Another way to improve performance is to pin frequently used packages in the shared memory pool. When a package is pinned, it is not aged out by the least recently used (LRU) algorithm that Oracle normally uses. The package remains in memory no matter how full the pool gets or how frequently you access the package.
    You can pin packages with the help of the supplied package DBMS_SHARED_POOL.
    Hope this will clear your doubt.
    Regards
    Yogesh

  • [SOLVED] effective way to clean my system?

    I would like to sort my packages by size in descending order, see what their names are and their descriptions, and then delete them if I don't want them anymore. Anyway to do this in an efficient way other than sifting through "pacman -Q", picking a package, doing "pacman -Qi package" and then deciding to remove with "pacman -Rsc package"?
    Thanks!
    Last edited by awayand (2011-11-14 12:57:43)

    nice, thanks shark and bohoomil, I was able to get almost a gig worth of cruft thrown out. Is there a script that allows me to specify number of dependencies? For example, when I do "pacman -Rs package" or "pacman -Rc package", I run into innocent-sounding packages that pull in hundreds of megabytes worth of packages (essential ones, at that). I am wondering if I can ask through a script something like "give me all packages that pull in at maximum X packages as recursive-/cascading dependencies, so I can identify packages that are less likely to be needed...
    Thanks!

  • Perfomance points in packages

    Hi all
    sorry for asking an old question, just hoping to get some new answers, i recently went for an interview and i was asked "what are the advantage of packages?", i said
    1.overloading,
    2.encapsulation,
    3.When you call a packaged subprogram for the first time, the whole package is loaded into memory. Therefore, subsequent calls to related subprograms in the package require no disk I/O
    4.packages stop cascading dependencies and so avoid unnecessary recompiling
    the interviewer said i'm missing one vital point in performace perspective and refused to tell that,
    hi gurus can you kindly tell me what are the other points that can be added in the list of "advantages of packages in performance perspective"
    Thank u

    No. Procedures are basically used to create basic building blocks to extend the language - making it more flexible and powerful. And these are most definitely re-usable code.
    Here is a basic example of how procedures are used in PL/SQL to extend the language by creating procedures to serve as "new language commands":
    SQL>
    SQL> -- a wrapper procedure that wraps raise_application_error
    SQL> create or replace procedure RaiseError( errNo number, errMsg varchar2 ) is
    2 begin
    3 -- for debugging we can turn the following on: DBMS_OUTPUT.put_line( 'Error '||errNo||': '||errMsg );
    4 -- we can also log the error to a log table via atonomous transaction, etc.
    5 raise_application_error( -20000-errNo , errMsg );
    6 end;
    7 /
    Procedure created.
    SQL>
    SQL> -- a utillity procedure to introduce a new command in PL/SQL
    SQL> create or replace procedure Assert( condition boolean, errNo number, errMsg varchar2 ) is
    2 begin
    3 if not condition then
    4 RaiseError( errNo, errMsg );
    5 end if;
    6 end;
    7 /
    Procedure created.
    SQL>
    SQL> create or replace type TMessageList is table of varchar2(200);
    2 /
    Type created.
    SQL>
    SQL>
    SQL> -- now in a package, I can use these procedures/language extensions
    SQL> create or replace package sampleP as
    2
    3 procedure DoSomething1( d date );
    4
    5 procedure DoSomething2( n number );
    6 end;
    7 /
    Package created.
    SQL>
    SQL>
    SQL> create or replace package body sampleP as
    2
    3 -- I define my error codes
    4 ERR_DATE_IS_NULL constant number := 1;
    5 ERR_DATE_INVALID constant number := 2;
    6 ERR_EMP_TABLE_IS_EMPTY constant number := 3;
    7
    8 -- .. and a corresponding message for each error
    9 ERROR_MESSAGE constant TMessageList := new TMessageList(
    10 'The date may not be null.',
    11 'The date may not be in the future.',
    12 'The EMP table is empty.'
    13 );
    14
    15
    16
    17 procedure DoSomething1( d date ) is
    18 begin
    19 -- the date may not be null
    20 assert(
    21 d is not null,
    22 ERR_DATE_IS_NULL,
    23 ERROR_MESSAGE( ERR_DATE_IS_NULL )
    24 );
    25
    26 -- the date may not be in the future
    27 assert(
    28 d <= SYSDATE,
    29 ERR_DATE_INVALID,
    30 ERROR_MESSAGE( ERR_DATE_INVALID )
    31 );
    32
    33 -- rest of the code for the proc...
    34 end;
    35
    36 procedure DoSomething2( n number ) is
    37 cnt integer;
    38 begin
    39 -- we do assertions to check our parameters, etc.
    40 --
    41 -- somewhere in our proc we select against EMP,
    42 -- but the EMP table is empty and throws no data found
    43 raise NO_DATA_FOUND;
    44
    45 -- more code...
    46
    47 exception when NO_DATA_FOUND then
    48 -- our exception handler catches the exception and turns it
    49 -- into a meaningful error
    50 RaiseError( ERR_EMP_TABLE_IS_EMPTY, ERROR_MESSAGE(ERR_EMP_TABLE_IS_EMPTY) );
    51 end;
    52
    53 begin
    54 null;
    55 end;
    56 /
    Package body created.
    SQL>
    SQL> var d varchar2(20)
    SQL>
    SQL> exec sampleP.DoSomething1( :d )
    BEGIN sampleP.DoSomething1( :d ); END;
    ERROR at line 1:
    ORA-20001: The date may not be null.
    SQL>
    SQL> exec :d := SYSDATE+1;
    PL/SQL procedure successfully completed.
    SQL> exec sampleP.DoSomething1( :d )
    BEGIN sampleP.DoSomething1( :d ); END;
    ERROR at line 1:
    ORA-20002: The date may not be in the future.
    SQL>
    SQL> exec sampleP.DoSomething2( 100 )
    BEGIN sampleP.DoSomething2( 100 ); END;
    ERROR at line 1:
    ORA-20003: The EMP table is empty.
    SQL>

  • Cascading parent/child inserts while avoiding uniqueness constraints

    Assume that I have two classes that I'd like to persist: MyObject and
    InternalObject. MyObject has an InternalObject field. That is, MyObject is
    the parent, InternalObject is the child in this one-to-one relationship.
    Steps involved:
    1) Enable ForeignKeyConstraints property in kodo.properties. That is add
    the line,
    kodo.jdbc.ForeignKeyConstraints=true
    2) In package.jdo, add the following kodo extensions for MyObject's
    InternalObject field mapping, i.e., io in my case.
    <field name="io" default-fetch-group="false">
    <extension vendor-name="kodo" key="jdbc-delete-action"
    value="cascade"/>
    <extension vendor-name="kodo" key="dependent" value="true"/>
    </field>
    The reasons that we have done these steps: we'd like kodo to properly
    re-order the sql statements if necessary in order not to violate
    parent/child dependencies during insertion, and also force cascading
    deletes in case we delete the parent object.
    Now comes the bulk of the algorithm.
    String sKey // key of the object to insert
    String sValue //value of the object to insert
    MyObject o = new MyObject(sKey, sValue);
    InternalObject io = new InternalObject(sKey,sValue); //using same values :)
    o.setInternalObject(io); //parent-child relation
    Object id = ((PersistenceCapable) o).jdoNewObjectIdInstance();
    ((PersistenceCapable)o).jdoCopyKeyFieldsToObjectId(id);
    kpm.currentTransaction().begin();
    try {
    Object trio = kpm.getObjectById(id, true);
    kpm.deletePersistent(trio);
    kpm.flush(); //apply deletes on the datastore
    } catch (ObjectNotFoundException oe) {
    System.out.println("First time!");
    kpm.makePersistent(o);
    kpm.currentTransaction().commit();

    If this is a question, the extension you have is only a directive to
    mappingtool to create cascade foreign keys. However, at runtime Kodo
    will rely upon the foreign key definitions in the schema. You should
    verify that the foreign key exists as you like in the schema. If you
    want to have child relationships to be deleted, you should use the
    dependent and element-dependent extensions.
    Ahmet Bulut wrote:
    Assume that I have two classes that I'd like to persist: MyObject and
    InternalObject. MyObject has an InternalObject field. That is, MyObject is
    the parent, InternalObject is the child in this one-to-one relationship.
    Steps involved:
    1) Enable ForeignKeyConstraints property in kodo.properties. That is add
    the line,
    kodo.jdbc.ForeignKeyConstraints=true
    2) In package.jdo, add the following kodo extensions for MyObject's
    InternalObject field mapping, i.e., io in my case.
    <field name="io" default-fetch-group="false">
    <extension vendor-name="kodo" key="jdbc-delete-action"
    value="cascade"/>
    <extension vendor-name="kodo" key="dependent" value="true"/>
    </field>
    The reasons that we have done these steps: we'd like kodo to properly
    re-order the sql statements if necessary in order not to violate
    parent/child dependencies during insertion, and also force cascading
    deletes in case we delete the parent object.
    Now comes the bulk of the algorithm.
    String sKey // key of the object to insert
    String sValue //value of the object to insert
    MyObject o = new MyObject(sKey, sValue);
    InternalObject io = new InternalObject(sKey,sValue); //using same values :)
    o.setInternalObject(io); //parent-child relation
    Object id = ((PersistenceCapable) o).jdoNewObjectIdInstance();
    ((PersistenceCapable)o).jdoCopyKeyFieldsToObjectId(id);
    kpm.currentTransaction().begin();
    try {
    Object trio = kpm.getObjectById(id, true);
    kpm.deletePersistent(trio);
    kpm.flush(); //apply deletes on the datastore
    } catch (ObjectNotFoundException oe) {
    System.out.println("First time!");
    kpm.makePersistent(o);
    kpm.currentTransaction().commit();
    Steve Kim
    [email protected]
    SolarMetric Inc.
    http://www.solarmetric.com

  • Cascading LOV in a Query panel (af:query)

    Hi
    I have a requirement to implement few Cascading LOV's in a Query panel. I have created the VO's for the LOV's with bind variable and view criteria and linked them. It works for the BC viewer. But to enable in the ADF UI, the partial trigger needs to be enabled on individual field. And the af:query encapsulates the fields and they are not exposed. Can someone help me with a solution or a pointer
    Many thanks

    Thanks for the pointer
    Well I followed the the steps, and implemented the same for two LOV's. I'm getting "Server Exception during PPR, #1". Would be able to identify where I'm going wrong please.
    FYI: I'm using a UI template that is stripped won from Oracles Dynamic tab template
    1. parent LOV
    <?xml version="1.0" encoding="windows-1252" ?>
    <!DOCTYPE ViewObject SYSTEM "jbo_03_01.dtd">
    <!---->
    <ViewObject
    xmlns="http://xmlns.oracle.com/bc4j"
    Name="QcChiptypeVViewRO"
    Version="11.1.1.56.60"
    BindingStyle="OracleName"
    CustomQuery="true"
    RowClass="com.qualcomm.qdt.fwk.model.QdtViewRowImpl"
    ComponentClass="com.qualcomm.qdt.fwk.model.QdtViewObjectImpl"
    DefClass="com.qualcomm.qdt.fwk.model.QdtViewDefImpl"
    PageIterMode="Full"
    UseGlueCode="false">
    <DesignTime>
    <Attr Name="_codeGenFlag2" Value="Access|VarAccess"/>
    <Attr Name="_isExpertMode" Value="true"/>
    </DesignTime>
    <SQLQuery>
    <![CDATA[SELECT QcChiptypeV.CHIPTYPE
    FROM QC_CHIPTYPE_V QcChiptypeV]]>
    </SQLQuery>
    <ViewAttribute
    Name="Chiptype"
    IsUpdateable="false"
    IsPersistent="false"
    PrecisionRule="true"
    Precision="42"
    Type="java.lang.String"
    ColumnType="VARCHAR2"
    AliasName="CHIPTYPE"
    Expression="CHIPTYPE"
    SQLType="VARCHAR">
    <DesignTime>
    <Attr Name="_DisplaySize" Value="42"/>
    </DesignTime>
    </ViewAttribute>
    </ViewObject>
    2. Child LOV
    <?xml version="1.0" encoding="windows-1252" ?>
    <!DOCTYPE ViewObject SYSTEM "jbo_03_01.dtd">
    <!---->
    <ViewObject
    xmlns="http://xmlns.oracle.com/bc4j"
    Name="QcMcnVViewRO"
    Version="11.1.1.56.60"
    BindingStyle="OracleName"
    CustomQuery="true"
    RowClass="com.qualcomm.qdt.fwk.model.QdtViewRowImpl"
    ComponentClass="com.qualcomm.qdt.fwk.model.QdtViewObjectImpl"
    DefClass="com.qualcomm.qdt.fwk.model.QdtViewDefImpl"
    PageIterMode="Full"
    UseGlueCode="false">
    <DesignTime>
    <Attr Name="_codeGenFlag2" Value="Access|VarAccess"/>
    <Attr Name="_isExpertMode" Value="true"/>
    </DesignTime>
    <Variable
    Name="chiptype"
    Kind="viewcriteria"
    Type="java.lang.String"/>
    <ViewAccessor
    Name="QcChiptypeVViewRO1"
    ViewObjectName="com.qualcomm.qdt.model.lov.QcChiptypeVViewRO"
    RowLevelBinds="true"/>
    <SQLQuery>
    <![CDATA[SELECT QcMcnV.MCN,
    QcMcnV.CHIPTYPE
    FROM QC_MCN_V QcMcnV]]>
    </SQLQuery>
    <ViewAttribute
    Name="Mcn"
    IsUpdateable="false"
    IsPersistent="false"
    PrecisionRule="true"
    Precision="20"
    Type="java.lang.String"
    ColumnType="VARCHAR2"
    AliasName="MCN"
    Expression="MCN"
    SQLType="VARCHAR">
    <DesignTime>
    <Attr Name="_DisplaySize" Value="20"/>
    </DesignTime>
    <Dependencies>
    <Item
    Value="Chiptype"/>
    </Dependencies>
    </ViewAttribute>
    <ViewAttribute
    Name="Chiptype"
    IsUpdateable="false"
    IsPersistent="false"
    PrecisionRule="true"
    Precision="42"
    Type="java.lang.String"
    ColumnType="VARCHAR2"
    AliasName="CHIPTYPE"
    Expression="CHIPTYPE"
    SQLType="VARCHAR">
    <DesignTime>
    <Attr Name="_DisplaySize" Value="42"/>
    </DesignTime>
    </ViewAttribute>
    <ViewCriteria
    Name="QcMcnVViewROCriteriaChiptype"
    ViewObjectName="com.qualcomm.qdt.model.lov.QcMcnVViewRO"
    Conjunction="AND">
    <Properties>
    <CustomProperties>
    <Property
    Name="displayOperators"
    Value="InAdvancedMode"/>
    <Property
    Name="autoExecute"
    Value="true"/>
    <Property
    Name="allowConjunctionOverride"
    Value="true"/>
    <Property
    Name="showInList"
    Value="true"/>
    <Property
    Name="mode"
    Value="Basic"/>
    </CustomProperties>
    </Properties>
    <ViewCriteriaRow
    Name="vcrow5"
    UpperColumns="1">
    <ViewCriteriaItem
    Name="QcMcnVViewROCriteria_vcrow5_Chiptype"
    ViewAttribute="Chiptype"
    Operator="="
    Conjunction="AND"
    Value=":chiptype"
    IsBindVarValue="true"
    Required="Optional"/>
    </ViewCriteriaRow>
    </ViewCriteria>
    </ViewObject>
    3. JSF page
    <?xml version='1.0' encoding='UTF-8'?>
    <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <f:view>
    <af:document id="d1">
    <af:messages id="m1"/>
    <af:form id="f1">
    <af:pageTemplate viewId="/oracle/ui/pattern/dynamicShell/dynamicTabShell.jspx"
    value="#{bindings.pageTemplateBinding}" id="pt1">
    <f:facet name="copyright">
    <af:outputText value="2010 Qualcomm Inc. All Rights Reserved."
    id="ot10"/>
    </f:facet>
    <f:facet name="about">
    <af:navigationPane id="np3" hint="buttons">
    <af:commandNavigationItem text="About" id="cni5"/>
    <af:commandNavigationItem text="Privacy" id="cni6"/>
    </af:navigationPane>
    </f:facet>
    <f:facet name="navigation">
    <af:panelAccordion id="pa1">
    <af:showDetailItem text=" Asset Details" id="sdi1">
    <af:panelGroupLayout layout="vertical" id="pgl1">
    <af:panelHeader text=" " id="ph1">
    <af:query id="qryId1"
    headerText="Search Criteria (Use % as wildcard)" disclosed="true"
    value="#{bindings.ImplicitViewCriteriaQuery.queryDescriptor}"
    model="#{bindings.ImplicitViewCriteriaQuery.queryModel}"
    queryListener="#{bindings.ImplicitViewCriteriaQuery.processQuery}"
    queryOperationListener="#{bindings.ImplicitViewCriteriaQuery.processQueryOperation}"
    saveQueryMode="hidden"/>
    </af:panelHeader>
    </af:panelGroupLayout>
    </af:showDetailItem>
    <af:showDetailItem text="More Info" id="sdi2"/>
    </af:panelAccordion>
    </f:facet>
    <f:facet name="globalLinks">
    <af:navigationPane id="np2" hint="buttons"
    inlineStyle="text-align:right;">
    <af:commandNavigationItem text="Help" id="cni4" action="noop"/>
    <af:commandNavigationItem text="Sign out"
    id="commandNavigationItem1"
    action="noop"/>
    </af:navigationPane>
    </f:facet>
    <f:facet name="status"/>
    <f:facet name="globalToolbar"/>
    <f:facet name="globalSearch"/>
    <f:facet name="globalTabs">
    <af:navigationPane id="np1">
    <af:commandNavigationItem text="Device Query/Update" id="cni1"
    selected="true" partialSubmit="false"/>
    <af:commandNavigationItem text="Asset Return" id="cni3"
    action="dummy" rendered="false"/>
    </af:navigationPane>
    </f:facet>
    <f:facet name="welcome">
    <af:panelSplitter id="ps1" orientation="vertical">
    <f:facet name="first">
    <af:panelCollection id="pc1" defaultToolbarItemDisplay="icon">
    <f:facet name="menus">
    <af:menu text="Options" id="m2" rendered="false">
    <af:commandMenuItem text="Printable Page" id="cmi2">
    <af:showPrintablePageBehavior/>
    </af:commandMenuItem>
    <af:commandMenuItem text="Download" id="commandMenuItem1">
    <af:exportCollectionActionListener exportedId="t2"
    type="excelHTML"
    title="Asset Details"/>
    </af:commandMenuItem>
    </af:menu>
    </f:facet>
    <f:facet name="toolbar">
    <af:toolbar id="t1">
    <af:commandToolbarButton id="ctb1"
    hoverIcon="/images/view_image.gif"
    text="Export to Excel">
    <af:exportCollectionActionListener exportedId="t2"
    type="excelHTML"
    title="Asset Details"/>
    </af:commandToolbarButton>
    </af:toolbar>
    </f:facet>
    <f:facet name="statusbar"/>
    <af:table value="#{bindings.QcDeviceTrackingVO1.collectionModel}"
    var="row"
    rows="#{bindings.QcDeviceTrackingVO1.rangeSize}"
    emptyText="#{bindings.QcDeviceTrackingVO1.viewable ? 'No data to display.' : 'Access Denied.'}"
    fetchSize="#{bindings.QcDeviceTrackingVO1.rangeSize}"
    rowBandingInterval="0"
    filterModel="#{bindings.ImplicitViewCriteriaQuery.queryDescriptor}"
    queryListener="#{bindings.ImplicitViewCriteriaQuery.processQuery}"
    filterVisible="true" varStatus="vs"
    selectedRowKeys="#{bindings.QcDeviceTrackingVO1.collectionModel.selectedRow}"
    selectionListener="#{bindings.QcDeviceTrackingVO1.collectionModel.makeCurrent}"
    rowSelection="single" id="t2"
    columnSelection="single"
    partialTriggers=":::ph1 :::qryId1">
    <af:column sortProperty="Serialnum" filterable="true"
    sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Serialnum.label}"
    id="c28" width="103">
    <af:outputText value="#{row.Serialnum}" id="ot17"/>
    </af:column>
    <af:column sortProperty="Assettag" filterable="true"
    sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Assettag.label}"
    id="c7" width="107">
    <af:outputText value="#{row.Assettag}" id="ot24"/>
    </af:column>
    <af:column sortProperty="Chiptype" filterable="true"
    sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Chiptype.label}"
    id="c18" width="26">
    <af:outputText value="#{row.Chiptype}" id="ot27"/>
    </af:column>
    <af:column sortProperty="Mcn" filterable="true"
    sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Mcn.label}"
    id="c11">
    <af:outputText value="#{row.Mcn}" id="ot13"/>
    </af:column>
    <af:column sortProperty="Mcnrev" filterable="true"
    sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Mcnrev.label}"
    id="c8">
    <af:outputText value="#{row.Mcnrev}" id="ot3"/>
    </af:column>
    <af:column sortProperty="Assignedto" filterable="true"
    sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Assignedto.label}"
    id="c15">
    <af:outputText value="#{row.Assignedto}" id="ot32"/>
    </af:column>
    <af:column sortProperty="Location" filterable="true"
    sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Location.label}"
    id="c24">
    <af:outputText value="#{row.Location}" id="ot19"/>
    </af:column>
    <af:column sortProperty="Locationfullname" filterable="true"
    sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Locationfullname.label}"
    id="c14">
    <af:outputText value="#{row.Locationfullname}" id="ot26"/>
    </af:column>
    <af:column sortProperty="Locationtype" filterable="true"
    sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Locationtype.label}"
    id="c13">
    <af:outputText value="#{row.Locationtype}" id="ot28"/>
    </af:column>
    <af:column sortProperty="Description" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Description.label}"
    id="c21">
    <af:outputText value="#{row.Description}" id="ot22"/>
    </af:column>
    <af:column sortProperty="Assignment" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Assignment.label}"
    id="c30">
    <af:outputText value="#{row.Assignment}" id="ot34">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.QcDeviceTrackingVO1.hints.Assignment.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="Createddate" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Createddate.label}"
    id="c1">
    <af:outputText value="#{row.Createddate}" id="ot15">
    <af:convertDateTime pattern="#{bindings.QcDeviceTrackingVO1.hints.Createddate.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="Lastid" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Lastid.label}"
    id="c33">
    <af:outputText value="#{row.Lastid}" id="ot9">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.QcDeviceTrackingVO1.hints.Lastid.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="Lportfolioitemid" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Lportfolioitemid.label}"
    id="c23">
    <af:outputText value="#{row.Lportfolioitemid}" id="ot23">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.QcDeviceTrackingVO1.hints.Lportfolioitemid.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="Lkeycontactid" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Lkeycontactid.label}"
    id="c4">
    <af:outputText value="#{row.Lkeycontactid}" id="ot11">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.QcDeviceTrackingVO1.hints.Lkeycontactid.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="Fullname" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Fullname.label}"
    id="c22">
    <af:outputText value="#{row.Fullname}" id="ot6"/>
    </af:column>
    <af:column sortProperty="Status" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Status.label}"
    id="c16">
    <af:outputText value="#{row.Status}" id="ot21"/>
    </af:column>
    <af:column sortProperty="Qcemployeenumber" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Qcemployeenumber.label}"
    id="c6">
    <af:outputText value="#{row.Qcemployeenumber}" id="ot33">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.QcDeviceTrackingVO1.hints.Qcemployeenumber.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="Field3" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Field3.label}"
    id="c12">
    <af:outputText value="#{row.Field3}" id="ot18"/>
    </af:column>
    <af:column sortProperty="Empdeptfullname" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Empdeptfullname.label}"
    id="c27">
    <af:outputText value="#{row.Empdeptfullname}" id="ot4"/>
    </af:column>
    <af:column sortProperty="Comments" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Comments.label}"
    id="c10">
    <af:outputText value="#{row.Comments}" id="ot16"/>
    </af:column>
    <af:column sortProperty="Builtby" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Builtby.label}"
    id="c19">
    <af:outputText value="#{row.Builtby}" id="ot20"/>
    </af:column>
    <af:column sortProperty="Mesbuild" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Mesbuild.label}"
    id="c31">
    <af:outputText value="#{row.Mesbuild}" id="ot2"/>
    </af:column>
    <af:column sortProperty="Esn" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Esn.label}"
    id="c26">
    <af:outputText value="#{row.Esn}" id="ot31"/>
    </af:column>
    <af:column sortProperty="Imei" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Imei.label}"
    id="c17">
    <af:outputText value="#{row.Imei}" id="ot29"/>
    </af:column>
    <af:column sortProperty="Macaddress" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Macaddress.label}"
    id="c32">
    <af:outputText value="#{row.Macaddress}" id="ot1"/>
    </af:column>
    <af:column sortProperty="Brf" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Brf.label}"
    id="c25">
    <af:outputText value="#{row.Brf}" id="ot8"/>
    </af:column>
    <af:column sortProperty="Brfrev" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Brfrev.label}"
    id="c3">
    <af:outputText value="#{row.Brfrev}" id="ot25"/>
    </af:column>
    <af:column sortProperty="Dacquisition" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Dacquisition.label}"
    id="c29">
    <af:outputText value="#{row.Dacquisition}" id="ot7">
    <af:convertDateTime pattern="#{bindings.QcDeviceTrackingVO1.hints.Dacquisition.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="Datqcmainttermdate" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Datqcmainttermdate.label}"
    id="c2">
    <af:outputText value="#{row.Datqcmainttermdate}"
    id="ot30">
    <af:convertDateTime pattern="#{bindings.QcDeviceTrackingVO1.hints.Datqcmainttermdate.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="Datqcissueddate" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Datqcissueddate.label}"
    id="c5">
    <af:outputText value="#{row.Datqcissueddate}" id="ot5">
    <af:convertDateTime pattern="#{bindings.QcDeviceTrackingVO1.hints.Datqcissueddate.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="Itlqciteclass" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.Itlqciteclass.label}"
    id="c20">
    <af:outputText value="#{row.Itlqciteclass}" id="ot14"/>
    </af:column>
    <af:column sortProperty="RowID" sortable="true"
    headerText="#{bindings.QcDeviceTrackingVO1.hints.RowID.label}"
    id="c9">
    <af:outputText value="#{row.RowID}" id="ot12"/>
    </af:column>
    </af:table>
    </af:panelCollection>
    </f:facet>
    <f:facet name="second">
    <af:panelTabbed id="pt2">
    <af:showDetailItem text="Update Attributes" id="sdi3"
    stretchChildren="first"/>
    </af:panelTabbed>
    </f:facet>
    </af:panelSplitter>
    </f:facet>
    <f:facet name="innerToolbar"/>
    <f:attribute name="brandingTitle" value="ITE Device Tracking System"/>
    <f:attribute name="navSplitterPosition" value="450"/>
    </af:pageTemplate>
    </af:form>
    </af:document>
    </f:view>
    </jsp:root>

  • Cascading List of Values & Query Panel

    Hello all! ADF BC JDev 11
    I should use Cascading List of Values in Search Query Panel. I build CLOV like in this sample http://www.oracle.com/technology/obe/obe11jdev/11/adfbc_new_features/adfbc.html .
    But when i use it in Search Query Panel it does not work. :(((
    I thik that i need to set partial triger on detail LOV field. How can i do that?
    Help!
    Edited by: Victor_V_S on 23.11.2009 7:45

    Hello,
    Thanks for a nice solution.
    I have a similar situation.
    I have a query panel with auto make name list of values returning make as name and make id into the hidden view attribute.
    Based on this, i have another list of values namely auto model which is also a name field returning a name and id(hidden).
    I tried choosing the auto model name field and editing dependencies as auto make id and later auto make name as well.
    But i get this error in the Weblogic Log every time i selected the auto make LOV or auto model LOV and auto model does not filter based on auto name .
    <SimpleSelectOneRenderer><_getSelectedIndex> Could not find selected item matching value "SomeNameViewCriteria" in QueryRenderer$2[UIXEditableFacesBeanImpl, id=null]
    I have no clue how to handle this.
    Any help is greatly appreciated.
    Thanks.

  • Cascade delete of products in APO

    Hi,
    I´m wondering if there are predefined ways for deleting a product and all it´s dependencies totally in APO. (Cascading deletion). I.e. setting a flag in the product master and getting rid of all connected PPM:s, location/product split, quota arrangements etc etc... Anybody knows how to do this efficiently?
    BR
    Karl

    Hi,
    I wish SAP has provided something like this.
    UNfortunately there is no one button where in you can delete all the dependencies
    Let me list you the steps to my best knowledge
    (1) Supply Chain Engineer --  TRansaction-- /n/sapapo/SCC07
    You can delete most of what you have asked
    Location, LOcation Product, Product, Resource, Trans Lane, PPM
    (2) Remember before this step, you will have to delete all the orders in all versions for this particular product location.
    Use report: /sapapo/rlcdelete to do this.
    Sometimes not all the orders get deleted and when you try to delete the master data in SCEngineer, it will say that there are dependencies.
    Then you would have to use the " WHERE USED LIST" for each master data and then it will display you the order numbers.
    You would have to manually delete each order number using the RLCDELETE report.
    Hope this helps.
    Regards
    Kumar

  • Cascading List of values in Query Panel

    Hello,
    This is related to the thread
    Re: Cascading List of Values & Query Panel
    Hello,
    Thanks for a nice solution.
    I have a similar situation.
    I have a query panel with auto make name list of values returning make as name and make id into the hidden view attribute.
    Based on this, i have another list of values namely auto model which is also a name field returning a name and id(hidden).
    I tried choosing the auto model name field and editing dependencies as auto make id and later auto make name as well.
    But i get this error in the Weblogic Log every time i selected the auto make LOV or auto model LOV and auto model does not filter based on auto name .
    <SimpleSelectOneRenderer><_getSelectedIndex> Could not find selected item matching value "SomeNameViewCriteria" in QueryRenderer$2UIXEditableFacesBeanImpl, id=null
    I have no clue how to handle this.
    Any help is greatly appreciated.
    Thanks.

    Hi,
    I have de same problem.
    I think that it could be a bug, cause if i check "show in list" option in the View criteria the messages are no prompted, and are prompted with that option unchecked.
    Although there's no problem during execution.
    Regards!

  • What is the proper way to deal with cascading triggers in AcroForms?

    (this has already been posted in the Scripting forum. Due to the lack of response, I am coming here to the Land of C/C++ Developers)
    What is the proper way to deal with cascading triggers in AcroForms?
    My question refers to the forms in which there is a binary question such as:
    "Are you interested in travel?"
    When the user clicks "Yes", there are further questions whose interactive fields are dot.hidden (or "!"), depending on the answer.
    So far, I can handle the 1-level cases fine, but my doubt is how to implement nested dependencies. For the sake of simplicity, I would prefer to define the cause-effect relationship once ("Every time the 'Interested in Travel' box is checked, the field 'International or Domestic' should be visible") and send some sort of message/trigger downstream.
    I would like the right things to happen (cascading triggers included) when the "Clear Form" menu command is selected.
    Are those desirable features available in JavaScript (the particular JS used by the traditional AcroForms)?
    Maybe I should look into C/C++ programming?
    TIA,
    -Ramon

    I guess my problem is that I have some basic college experience in digital circuit design, and would like the forms to be programmed and behave in the same fashion as digital logic.
    The "Clear Form" menu item, of course, would be equivalent to the  reset button.
    Perhaps it is possible to hook my code onto the "Clear Form" menu item?
    -Ramon

  • Sql query to find dependencies for a table

    Hi All,
    I am having a table (REPT_ALL) with dependent objects on it ( child tables, indexes, constraints, views, synonyms, sequences , packages,procedures,functions,triggers).
    I want the query to find out all the above dependencies for the above table(REP_ALL).
    I m looking for the query to find dependencies inorder to find out the risks before dropping the above table(drop table REP_ALL cascade constraints)?
    Thnx

    To find foreign key constraints for a table you cannot use DBA_DEPENDENCIES but you have to use DBA_CONSTRAINTS.
    Example Re: Find out foreign key column

  • Is there a way to remove packages that are installed as dependencies?

    Hi,
    I recently tried out GDM, and found that I don't like it. I now wish to remove it, along with all the dependencies that were installed along with it.
    However, I cannot find a way to list the dependencies of GDM, so that I can remove those as well.
    The pacman manual mentioned --cascade and --recursive , however cascade does not list anything else, and recursive includes WAY too many extra packages, many of which I actually need.
    Is there a way to remove the packages that were installed along with GDM, but nothing more and nothing less?
    Thanks,
    James

    magicalChicken wrote:Be very careful with -Rsc, as this could remove many very important packages it used inapropriatly, I would recommend just pacman -Rs gdm, then check for orphaned packages.
    +1
    I also remove packages with the -Rs switch.  I occasionally check for orphans.  In fact, I wrote an 'orphans' function in in my ~/.bashrc for this purpose.
    orphans() {
    if [[ ! -n $(pacman -Qdt) ]]; then
    echo no orphans to remove
    else
    sudo pacman -Rs $(pacman -Qdtq)
    fi

  • Get('XML') doesn't work, but get() does in javascript - CASCADING LOVs

    I'm trying to get cascading LOVs working in Apex 3.1.0 in Oracle 11g. When I call get.get('XML') it returns null in firefox and empty string in IE6. If I change it to call get.get() then it returns the XML as a string into Javascript.
    The Application process is getting called in both scenarios as i've put PL/SQL logging to disk in order to prove it. The XML being returned is very basic so i'm sure it's not a problem with formatting. I'm not getting any exceptions thrown in javascript either.
    Is it possible to use get.get() and then convert the text into an XML object which is returned as per get.get('XML') which at least will allow me to get something working ?
    thanks
    &lt;script language="JavaScript" type="text/javascript"&gt;
    function getBusinessFieldJS(pThis, pSelect)
    alert('getBusinessFieldJS');
    try
    var l_Return = null;
    var l_Select = html_GetElement(pSelect);
    var get = new htmldb_Get(null, html_GetElement('pFlowId').value, 'APPLICATION_PROCESS=GET_DATA_FIELDS_XML', 0);
    /*get.add('F120_GETBUSINESSFIELD_ITEM',pThis.value);*/
    gReturn = get.get('XML');
    alert('gReturn=' + gReturn);
    alert('gReturn.value=' + gReturn.value);
    if (gReturn == null)
    alert('gReturn is null');
    if(gReturn && l_Select)
    var l_Count = gReturn.getElementsByTagName("option").length;
    alert('l_count='+l_Count);
    l_Select.length = 0;
    for(var i=0;i&lt;l_Count;i++)
    var l_Opt_Xml = gReturn.getElementsByTagName("option")+;+
    + appendToSelect(l_Select, l_Opt_Xml.getAttribute('value'),+
    + l_Opt_Xml.firstChild.nodeValue)+
    + }+
    + }+
    +
    get = null;+
    + }+
    + catch (e)+
    + {+
    + alert('Exception : ' + e);+
    +
    }+
    +}+

    Hi,
    I've been trying to replicate your problem here: [http://apex.oracle.com/pls/otn/f?p=37055:1]
    My application process is:
    BEGIN
    OWA_UTIL.mime_header ('text/xml', FALSE);
    HTP.p('Cache-Control: no-cache');
    HTP.p('Pragma: no-cache');
    OWA_UTIL.http_header_close;
    HTP.prn('<select>');
    HTP.prn('<option value="-1">Please Select</option>');
    HTP.prn('</select>');
    END;(Just copied from your post and XML changed to xml, otherwise untouched)
    And my page has a simple HTML region with the source of:
    &lt;div id="XMLOUTPUT" style="border:1px solid blue; width:200px; height:200px;"&gt;&lt;/div&gt;
    &lt;div id="XMLOUTPUT2" style="border:1px solid blue; width:200px; height:200px;"&gt;&lt;/div&gt;
    &lt;script type="text/javascript"&gt;
    function getMyXML()
    var l_Return = null;
    var get = new htmldb_Get(null, html_GetElement('pFlowId').value, 'APPLICATION_PROCESS=RETURN_XML', 0);
    gReturn = get.get('XML');
    var d = html_GetElement('XMLOUTPUT');
    d.innerHTML = gReturn;
    var d2 = html_GetElement('XMLOUTPUT2');
    d2.innerHTML = get.get();
    var s = gReturn.getElementsByTagName("select");
    alert(s.length);
    &lt;/script&gt;
    &lt;a href="javascript:getMyXML();"&gt;Click&lt;/a&gt;Click on Click at the bottom of the page. The first DIV gets the get.get('XML') object and the second one the get.get() and a popup message tells you how many "select" items are in the XML version.
    As far as I can see, this works fine.
    Andy

  • How do I delete cascade with a PL/SQL procedure?

    This script will create a PL/SQL procedure that deletes cascade. This is a post to contribute to the Oracle community. Take the code as is and test it before you use it in production. Make sure this is what you want.
    Procedure Delete Cascade (prc_delete_cascade)
    Description
    =============
    The principle is very simple. The procedure uses a table called TO_BE_DELETED to keep a list of records to be deleted. This
    table keeps the table name and the rowid of those records that need to be deleted. The procedure also uses a function called
    DELETE_BOTT_ROW which takes one record of the table and tries to delete it. If the deletion fails with a foreign key constraint
    violation, the function parses the SQL error message (SQLERRM) to get the name of the constraint. With the name of the constraint,
    the function finds the name of the child table, all the child records that have references to the parent table primary or unique key,
    and the parent key primary or unique key column name. Once the child records of the failed delete are identified, the function takes their table name and rowids
    and records them into the TO_BE_DELETED table by inserting records of their table name and their rowids. Al the records inserted also contain the level (which
    is 1 for the original records, 2 for child records, 3 for granchild records, etc.) and the sequence number of the order in wich they
    are recorded. This way, when the function picks up a record to be deleted, it takes the one with the highest level and the highest
    inserted sequence, or the "bottom" record. Once all the child records of the failed delete are appended to the TO_BE_DELETED table, it calls itself
    recursevely, and the function takes the record at the "bottom" of the table and tries to delete it. If it succeeds, it calls
    itself recursevely to delete the next record. If it fails, it goes and finds the child records as described before and once they are
    inserted into the TO_BE_DELETED table, it calls itself again recursevely to try to delete again the "bottom" record. All records
    that are successfully deleted are flagged as deleted usig the flag_del column so they are not pickt up again. Once all the (parent,
    child, grandchild, etc.) records are deleted, the procedure ends without commiting, giving the option to the user to commit or
    rollback deletions. The table TO_BE_DELETED is, at the end of the procedure, a list of all the records that were deleted, including their table names
    and the order in with they were deleted. The user then can review its content and decide to commit or rollback.
    Restrictions
    ============
    1. Single tables only. The procedure only takes one table name and a WHERE clause to identified the records to be deleted.
    2. Single columns only. Ther procedure only works with single-column primary, unique and foreign key constraints.
    3. Single schema only.
    4. Unpredictable results with circular references.
    drop table to_be_deleted purge;
    create table to_be_deleted
    (tname varchar2(30)       -- table name
    ,rid rowid                -- rowid
    ,lvl number               -- level: 1=parent, 2=child, 3=grandchild, etc.
    ,seq_ins number           -- sequence order of record inserted
    ,flg_del char             -- flag deleted: Y=record deleted
    ,seq_del number           -- global order of record deletion
    set serveroutput on size 1000000
    create or replace procedure prc_delete_cascade
    (p_tname varchar2  -- table name
    ,p_where varchar2  -- where clause identifying records to be cascade deleted
    is
      dummy         char;
      v_sqlcode     number;
      v_sqlerrm     varchar2(32767);
      v_param_val   integer := 0;
      v_sql         varchar2(4000);
      v_ret_cde     number;
      e_bad_params  exception;
      v_iter        number;
      v_plvl        number;
      v_seq_del     number;
      v_max_iter    number := 1000000000;
      function delete_bott_row
      return number
      is
        v_sql        varchar2(4000);
        v_ptname     varchar2(30);  -- parent table name
        v_ppkname    varchar2(30);  -- parent primary key constraint name
        v_ppkcname   varchar2(30);  -- parnet primary key column name
        v_prowid      rowid;
        v_crowid      rowid;
        v_ctname     varchar2(30);  -- child table name
        v_cfkname    varchar2(30);  -- child foreign key constraint name
        v_cfkcname   varchar2(30);  -- child foreign key column name
        v_ins        number;
        v_seq_ins    number;
        v_sqlerrm    varchar2(4000);
        v_sqlcode    number;
        e_const_viol exception;
        pragma exception_init(e_const_viol, -2292);
        e_max_iter_reached exception;
      begin
        v_iter := v_iter + 1;
        if v_iter >= v_max_iter then
          raise e_max_iter_reached;
        end if;
        dbms_output.put_line('- Iter '||to_char(v_iter));
        dbms_output.put_line('----------');
        dbms_output.put_line('- Starting function delete_bott_row');
        v_sql := 'select tname, rid, lvl, seq_ins from (select * from to_be_deleted where flg_del = ''N'' order by lvl desc, seq_ins desc) where rownum=1';
        --  dbms_output.put_line('- SQL: '||v_sql);
        execute immediate v_sql into v_ptname, v_prowid, v_plvl, v_seq_ins;
        dbms_output.put_line('- Selected row: table name: '||v_ptname||', level: '||v_plvl||', seq: '||v_seq_ins);
        v_sql := 'delete from '||v_ptname||' where rowid='''||v_prowid||'''';
        dbms_output.put_line('- SQL: '||v_sql);
        execute immediate v_sql;
        dbms_output.put_line('- Row deleted !!!');
        v_ret_cde := 1;
        v_seq_del := v_seq_del + 1;
        dbms_output.put_line('- Mark the row deleted');
        v_sql := 'update to_be_deleted set flg_del = ''Y'', seq_del = '||to_char(v_seq_del)||' where tname='''||v_ptname||''' and rid='''||v_prowid||'''';
        -- dbms_output.put_line('- SQL: '||v_sql);
        execute immediate v_sql;
        -- dbms_output.put_line('- Updated table to_be_deleted, row marked deleted');
        -- dbms_output.put_line('- End of iter '||to_char(v_iter));
        dbms_output.put_line('----------');
        -- call function delete_bott_row recursively
        v_ret_cde := delete_bott_row;
        return 0;
      exception
        when no_data_found then
          dbms_output.put_line('- Table to_be_deleted is empty, delete cascade has completed successfully.');
          v_ret_cde := 0;
          return 0;
        when e_const_viol then
          v_sqlcode := SQLCODE;
          v_sqlerrm := SQLERRM;
          v_ret_cde := v_sqlcode;
          dbms_output.put_line('>Constraint Violation. Record has children');
          -- dbms_output.put_line('Error code: '||to_char(v_sqlcode));
          v_cfkname := substr(v_sqlerrm,instr(v_sqlerrm,'.')+1,instr(v_sqlerrm,')') - instr(v_sqlerrm,'.')-1);
          dbms_output.put_line('>Child FK name: '||v_cfkname);
          select table_name, column_name
            into v_ctname, v_cfkcname
            from user_cons_columns
           where constraint_name=v_cfkname;
          dbms_output.put_line('>Child table name: '||v_ctname||'. FK column name: '|| v_cfkcname);
          select constraint_name, column_name
            into v_ppkname, v_ppkcname
            from user_cons_columns
           where constraint_name = (select r_constraint_name
                                      from user_constraints
                                      where constraint_name=v_cfkname);
          dbms_output.put_line('>Parent PK/UK name: '||v_ppkname||'. Parent PK/UK column: '||v_ppkcname);
          v_sql := 'insert into to_be_deleted(tname, rid, lvl, seq_ins, flg_del) '||
                   'select '''||v_ctname||''', rowid, '||to_char(v_plvl+1)||', rownum, ''N'' '||
                   'from '||v_ctname||' '||
                   'where '||v_cfkcname||' =any (select '||v_ppkcname||' from '||v_ptname||' where rowid =any (select rid from to_be_deleted where tname = '''||v_ptname||'''))';
          -- dbms_output.put_line('- SQL: '||v_sql);
          execute immediate v_sql;
          select count(*)
            into v_ins
            from to_be_deleted
           where lvl = v_plvl+1
             and tname = v_ctname
             and flg_del = 'N';
          dbms_output.put_line('>Found '||to_char(v_ins)||' child records which were added to table to_be_deleted');  
          v_ret_cde := delete_bott_row;
          return  v_ret_cde;
        when e_max_iter_reached then
          dbms_output.put_line('Maximum iterations reached.  Terminating procedure.');
          raise;
        when others then
          raise;
      end delete_bott_row;
    begin
      dbms_output.put_line('Beginning');
      dbms_output.put_line('================================');
      -- validate p_table
      begin
        select 'Y'
          into dummy
          from user_tables
         where table_name=upper(p_tname);
      exception
        when no_data_found then
        v_param_val := 1;
        dbms_output.put_line('Table '||p_tname||' does not exist.');
        raise e_bad_params;
      end;
      dbms_output.put_line('- Parameter p_tname validated');
      -- validate p_where
      begin
        execute immediate 'select ''Y'' from '||p_tname||' where '||p_where INTO dummy;
      exception
        when no_data_found then  -- where clause returns no records
          dbms_output.put_line('Record(s) not found.  Check your where clause parameter');
          v_param_val := 2;
          raise e_bad_params;
        when too_many_rows then  -- found multiple records means it is ok
          null; 
        when others then  --  any other records means where clause has something wrong.
          dbms_output.put_line('Where clause is malformed');     
          v_param_val := 2;
          raise e_bad_params;
      end;   
      dbms_output.put_line('- Parameter p_where validated');
      if v_param_val > 0 then raise e_bad_params; end if;
      v_iter := 0;
      v_plvl := 1;
      v_seq_del := 0;
      v_sql := 'insert into to_be_deleted(tname, rid, lvl, seq_ins, flg_del) select '''||upper(p_tname)||''', rowid, '||to_char(v_plvl)||', rownum, ''N'' from '||p_tname||' where '||p_where;
      dbms_output.put_line('- Inserting initial record');
      dbms_output.put_line('- SQL: '||v_sql);
      execute immediate v_sql;
      dbms_output.put_line('- Record(s) inserted');
      dbms_output.put_line('- Calling function delete_bott_row to delete last row of table to_be_deleted');              
      dbms_output.put_line('-----------------------------------');              
      v_ret_cde :=  delete_bott_row;
      -- dbms_output.put_line('- Back from function delete_bott_row');              
      -- dbms_output.put_line('Return code: '||to_char(v_ret_cde));              
      dbms_output.put_line('- End of procedure');              
    exception
      when e_bad_params then
        dbms_output.put_line('Bad parameters, exiting.');
    end;
    show errors
    spool prc_delete_cascade.log
    --  Call to the procedure
    exec prc_delete_cascade('xent','xent_id between 1669 and 1670')
    select tname "Table Name", count(*) "Rows deleted"
      from to_be_deleted
    group by tname;
    spool off
    set lines 120
    select *
      from to_be_deleted
    order by seq_del;
    prompt  Now commit or rollaback deletions.
    -- commit;
    -- rollback;Edited by: Rodolfo4 on Mar 23, 2011 10:45 AM

    Interesting.
    I see a few areas where this could be useful. Elimiating specific test records from a Test DB for example.
    Some comments:
    <li>Since this is a recursive logic you must add a stop criteria. In this case I would add a max iteration variable. If that one is reached, raise an error message and let the procedure stop with that error.</li>
    <li>The when others exception at the end should be removed completely</li>
    <li>The when others exception in the middle should be replaced by a specific exception that handles the -2292 error</li>
    <li>A list of tables where no record should be deleted could be usefull. If the logic would encounter such a table, it should also stop. This would be to prevent that data from some system critical tables could be deleted per accident.</li>
    <li>The reference from the FK constraint to the PK constraint should include the table name and if possible the owner (as long as you use user_* views the owner is always the same. But we could extend this to the ALL_* views). I never met a system where different tables have the identical FK constraint names, however just make this fool proof.</li>

  • Issue in EHP5 Talent Management (Team Goals) Cascade goals functionality

    Hi Friends,
    Issue in EHP5 Talent Management (Team Goals) Cascade goals functionality.
    Under Team Object While try to cascade goals, it pop-Up Warning Msg u201CChoose Save to save the goal in the employee document. The goal can no longer be deleted, only set to obsoleteu201D.
    If we click Ok to proceed further, I am getting error stating u201CYou have made no selection" and " No appraisal template defined ".
    Same functionality is working fine in u201CPerformance Management (Predefined)u201D
    With Regards
    Seranjeeve Kumar

    Please  set the parameter PROCESS "PMP" in the iview configuration.
    ie
    ROLE_ID=PA&PROCESS=PMP in application parameters
    content provided by SAP ->
    specialist ->
    Talent management Specialist ->
    iViews ->
    COmpany goals etc
    and you can confirm using this
    CL_HAP_CASCADE_GOALS > meth0d GET_VALID_APPRAISAL_TEMPLATES
    The parameter mentioned in the note 1457057, the one that you enter in
    transaction SE80 is the default value. However, if you call application
    with parameter PROCESS=PMP then the PMP process for cascading goals will
    be used.
    check note  1523527

Maybe you are looking for

  • My brother can't access his company's website with Safari or Firefox

    This is driving me nuts. My two brothers own a home building company and paid me to design and put up a website for them. My brother Scott, who I recently switched to the Mac, can't access the site with either Safari or FireFox. He hasn't had any tro

  • I am doing pricing? How to introduce new calculation type ...

    Hi, As part of New condition type creation, I am in position to intrduce New calculation type is "X" - Time based by hrs New scale basis is "X"  - Time based by hrs It really very urgent, any oss note will also help. Laxman

  • Can livecycle es4 meet our requirments?

    Hi,how can i apply livecycle es4 into my company? Our requirments are list below: 1.automat encryption PDF files,microsoft office type files,and so on; 2,application security policy to that files,such as read,edit,print,living period; 3,the security

  • LocalStorage not storing between sessions

    Hi, When I load panel whitch conteining below HTML code: <!doctype html> <html> <head> <meta charset="utf-8"> <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> <script type="text/javascript"> $(document).ready(function(){    $('#save

  • How to set Displayed Properties?

    I want to set different Displayed Properties for folder and documents in my layout.How can I archieve that? Best Regards!