Function call. BDT, APPLC event
Hi experts:
I've got a question about some standar code in the BDT. This is the code
IF SY-SUBRC = 0.
*----- ... Zeitpunktfunktionsbausteine aufrufen ------------------------
LOOP AT LT_TBZ1F ASSIGNING <TBZ1F> WHERE ZTPKT = 'APPLC'
AND NOT XAKTV IS INITIAL.
CALL FUNCTION <TBZ1F>-FNAME
CHANGING
CT_TBZ0A = LT_TBZ0A.
ENDLOOP.
gv_applc_has_run = 'X'.
ENDIF.
LT_TBZ0A is defined this way:
DATA LT_TBZ0A TYPE TABLE OF TBZ0A.
I've created a function module and set in the export section the next parameter declaration:
CT_TBZ0A TYPE TBZ0A Aplicaciones BDT
As you can suppose, I'm recieving only the header of LT_TBZ0A in the function and i need all the itable. What am i doing something wrong ? Is it possible that SAP's mistaken the code ?
There is an OSS Note about that, but i've already aplicate it. This is part of the BDT, event APPLC.
Thank you very much.
Chagne the CT_TBZ0A definition to table type fo the TBZ0A in the Import parameter.
CT_TBZ0A TYPE TY_TBZ0A Aplicaciones BDT " << TY_TBZ0A
Regards,
Naimesh Patel
Similar Messages
-
Hang Calling function after Document Class' Event.ADDED
I was trying to load an external SWF (that contains the below code in its document class) with the Loader class but i keep on receiving Error #1009: Cannot access a property or method of a null object reference. So i tried to use the event listener Event.ADDED in MyDocumentClass constructor of the external SWF to let the document class be part of the display list before i invoke createRandomGraph. But when i place createRandomGraph( ) inside onStageReady, The compilation process hangs. When i leave the createRandomGraph( ) inside the constructor, it works perfectly as stand alone but will produce Error 1009 if loaded within the loader SWF. Any ideas?
public function MyDocumentClass( )
this.addEventListener(Event.ADDED, onStageReady);
createRandomGraph( )
private function onStageReady(oEvent:Event):void
this.removeEventListener(Event.ADDED, onStageReady);
private function createRandomGraph( ):void
var cRandomGraph:RandomGraph = new RandomGraph();
cRandomGraph.x = 10;
cRandomGraph.y = stage.stageHeight - nH - 25;
cRandomGraph.setDimensions(nW,nH);
cRandomGraph.createGraphBackground();
this.addChild(cRandomGraph);use:
public function MyDocumentClass( )
this.addEventListener(Event.ADDED_TO_STAGE, onStageReady);
private function onStageReady(oEvent:Event):void
this.removeEventListener(Event.ADDED, onStageReady);
createRandomGraph();
private function createRandomGraph( ):void
var cRandomGraph:RandomGraph = new RandomGraph();
cRandomGraph.x = 10;
cRandomGraph.y = stage.stageHeight - nH - 25;
cRandomGraph.setDimensions(nW,nH);
cRandomGraph.createGraphBackground();
this.addChild(cRandomGraph); -
Premiere CS5: R6025 - pure virtual function call
When I go to render the sequence, I get:R6025 - pure virtual function call and the program crashes.
the problem details are reporting:
Problem Event Name: APPCRASH
Application Name: Adobe Premiere Pro.exe
Application Version: 5.0.0.0
Application Timestamp: 4bb568b7
Fault Module Name: Backend.dll
Fault Module Version: 5.0.0.0
Fault Module Timestamp: 4bb529dd
Exception Code: 40000015
Exception Offset: 00000000001ba7eb
OS Version: 6.0.6001.2.1.0.256.6
Locale ID: 1033
Additional Information 1: 603b
Additional Information 2: 3ec9d140f10efeb2f0a7d02f968c360a
Additional Information 3: a863
Additional Information 4: 75c6e9df8ab75d63002e907cb106c2fa
Running Vista 64bit on a Dell T7400 with 12GB ram and Raid HDD's
Any thoughts?
Thanks
PaulI'm having the same issue:
Faulting application name: Adobe Premiere Pro.exe, version: 5.0.1.0, time stamp: 0x4bf119d2
Faulting module name: Backend.dll, version: 5.0.1.0, time stamp: 0x4bf0dba0
Exception code: 0x40000015
Fault offset: 0x00000000001baafb
Faulting process id: 0x15a8
Faulting application start time: 0x01cb1b96d983de39
Faulting application path: C:\Program Files\Adobe\Adobe Premiere Pro CS5\Adobe Premiere Pro.exe
Faulting module path: C:\Program Files\Adobe\Adobe Premiere Pro CS5\Backend.dll
Report Id: 6d0f1532-878a-11df-a3c5-81e14690b8b6
Crashing during rendering.
I 'm running Windows 7, 64 bit, Dell Covet 6400, Nvida Quadro FX3700M, 4gb ram.
Issue occurs at the same frame, 802 of 2961 everytime I make at attempt to render.I've also noticed the Premier remains in memory after the crash.
Has this been reported to Adobe or added to the bus list? If not, any idea how to get it added?
thanks -
Function call from button works then vanishes if I click anywhere
I have the following code and it works great some times but others nothing happens, the button seems to work then for no apparent reason (at least nothing that comes up in the javascript console) I click and it says "FundName.FundTitle.getFundTitle is not a function" but it worked several times before that and nothing changed. Feel like I'm losing my mind, please give me some insight if you have any, everything is set to export for acrobat 9 and I have reader nine installed.
DeedEstablishmentForm.Page1.Button2::click - (JavaScript, client)
var str = FundName.FundTitle.getFundTitle();
I have a fragment that has the following:
form1.FundName.FundTitle::initialize - (JavaScript, client)
function getFundTitle(){
this.str = new String(this.rawValue);
this.start = str.length - 20;
this.idx = str.toLowerCase().lastIndexOf('superannuation fund');
xfa.host.messageBox(this.str.valueOf());
xfa.host.messageBox(this.start.toString());
xfa.host.messageBox(this.idx.toString());
if(this.start >= 1 && this.idx >= this.start && this.idx >= 1){
return this.str.slice(0,idx);
}else{
return this.str;I talked to the developers about this one and I think we figured out what is happening. It has to do with the scope of the function. Here is what we believe is happening. You have defined your function on the Initialize event of an object. The function gets created and at the end of the Initialize event script it is no longer needed so it is marked for deletion. The function is still around until the next garbage collection cycle. Now the form finishes loading and you hit the button to call the function. Because th efunction still exists it is called. You continue to do this and all is OK. At some point garbage collection will run and the function will be deleted. It is at that point that you call it again and get the error. To resolve this problem you need to ensure that the funstion is always available. If you move your function to a script object then when the form loads the script object will run and your function will be created. Now it is callable at all times and shoudl alleviate th eissue you are having.
On another note I noticed the use of the "this" key word in your script. In our world the "this" object is the obejct that has focus (or who is making the call). The ability to extend the "this" object as you do with str, start and idx is going to disappear. The "this" object will become immutable in a future release. To ensure that you do not have issues in a future release I suggest you change the way you do that code.
Lastly by moving the code to a script object you will not be able to use "this". You can pass an object to the script and use that instead.
Hope that helps. Let me know if you need further explanation.
Paul -
Function called IN BACKGROUND TASK goes to work process DIA, not BGD
I'm calling a function IN BACKGROUND TASK
In SM50, I see it running in a DIA work process.
I want it to run in a BGD work process.
Can this be done? If so, how? If not, why not?Hi...
It looks like, it will always run in DIA process and not Background process...I am not sure that we can change the work process
Check the below link..
http://help.sap.com/saphelp_40b/helpdata/pt/69/c24f864ba111d189750000e8322d00/content.htm
What is written in the link is...
"Background updates (CALL FUNCTION IN BACKGROUND TASK) represent a variant of remote function call that is synchronous with the end of a transaction (COMMIT WORK). In background updating, an update is run in another dialog work process that may be in the same or in another application server and R/3 System. Because such updates run in their own LUWs, they may start only after all critical updates have been completed. Otherwise, it would not be possible to roll back background changes in the event of an error in another update component. "
IF you get the answer of whether we can change the work process then please let us know... -
I am trying to call a function (type4) from within a FormCalc exit event:
if ($.rawValue <> "2") then
type4.validate()
endif
But when I run the form, I get an error saying that the "script does not have a method 'validate'."
My function definitely does have a method called 'validate', see below:
function validate() {
Can anyone help me identify what I'm doing wrong? Thanks for your help.
--BruceHi,
I beleive validate() is a reserved method, so you should rename your function into validateObj() or so.
And when calling a function, the syntax looks like:
if ($.rawValue <> "2") then
validateObj()
endif
In contrast to JavaScript FormCalc can only call functions which have been declared before the function call.
Just an example.
This script works, because the function is declared before it's called.
func alert(msg) do
$host.messageBox(msg)
endfunc
if ($ < 2) then
alert("value to small")
else
alert("value ok")
endif
but this script fails, because the function call points to a function which has not be declared yet.
if ($ < 2) then
alert("value to small")
else
alert("value ok")
endif
func alert(msg) do
$host.messageBox(msg)
endfunc -
Profiler tracking function call
Hi there,
is it possible to track a function call in a stored procedure?
thanks,
Ed<TypesInSSMS>
CREATE FUNCTION myfunky() RETURNS int AS
BEGIN
DECLARE @ret int
SELECT @ret = @@spid
RETURN (SELECT @@spid)
END
go
CREATE PROCEDURE sproc AS
SELECT dbo.myfunky() FROM sys.objects
</TypesInSSMS>
Starts Profiler. Select the entire event category Stored Procedures. In the query window selects "sproc". Clicks Execute. Looks in Profiler.
Seems like the answer is yes.
Erland Sommarskog, SQL Server MVP, [email protected] -
How to call a particular event?
Hello All,
How to call a particular event like handle_data_changed after you press a button which is created in ALV.
Regards,
Lisa.ALV (Abap List Viewer)
We can easily implement basic features of reports like Sort, Allign, Filtering, Totals-Subtotals etc... by using ALV. Three types of reports we can do by ALV as 1. Simple Report, 2. Block Reprot and 3. Hierarchical Sequential Report.
alv grid types
1) list/ grid
these are having rows and columns
function modules for this type are
REUSE_ALV_LIST_DISPLAY
REUSE_ALV_GRID_DISPLAY2)
2) HIERARCHY
this will have header and line items
function module for this type
REUSE_ALV_HIERSEQ_LIST_DISPLAY
3) tree
this will nodes and child type structure
function module for this type
REUSE_ALV_TREE_DISPLAY
4) APPEND
this can append all the different types of lists where each list has different number of columns
events associated with alvs
1) top of page
2) end of page
3) top of list
4) end of list
5) on double click
6) on link click
7) on user command
some useful links:
http://www.sapdevelopment.co.uk/reporting/alvhome.htm
http://help.sap.com/saphelp_nw04/helpdata/en/99/49b844d61911d2b469006094192fe3/frameset.htm
Examples:
REPORT Z_ALV__ITEM .
TYPE-POOLS : slis.
Data
DATA : BEGIN OF itab OCCURS 0.
INCLUDE STRUCTURE t001.
DATA : flag tyPE c,
END OF itab.
*DATA: itab like t001 occurs 0 with header line.
DATA : alvfc TYPE slis_t_fieldcat_alv.
DATA : alvly TYPE slis_layout_alv.
data v_repid like sy-repid.
Select Data
v_repid = sy-repid.
SELECT * FROM t001 INTO TABLE itab.
*------- Field Catalogue
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = v_repid
i_internal_tabname = 'ITAB'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = alvfc[] .
Display
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = alvfc[]
i_callback_program = v_repid
is_layout = alvly
TABLES
t_outtab = itab
EXCEPTIONS
program_error = 1
OTHERS = 2.
In very detail it's not easy, i believe it's better for you to test the function modules to work with ALV :
REUSE_ALV_FIELDCATALOG_MERGE to create the fieldcatalogue
REUSE_ALV_GRID_DISPLAY - to display the ALV in grid format
REUSE_ALV_LIST_DISPLAY - to display the ALV in list format
Anyone, here's one exemple of creating ALV reports :
REPORT ZALV_SLAS_GDF .
Declaração de Dados
TABLES: ZSLA_NIV_SAT.
selection-screen begin of block b1 with frame title text-001.
select-options DATA for ZSLA_NIV_SAT-DATA. " Data
select-options LIFNR for ZSLA_NIV_SAT-LIFNR. " Nº de conta fornecedor
select-options WERKS for ZSLA_NIV_SAT-WERKS. " Centro
select-options EBELN for ZSLA_NIV_SAT-EBELN. " Nº contrato
selection-screen end of block b1.
DATA: BEGIN OF itab1 OCCURS 100.
include structure ZSLA_NIV_SAT.
data: END OF itab1.
Outros dados necessários:
Campo para guardar o nome do report
DATA: i_repid LIKE sy-repid.
Campo para verificar o tamanho da tabela
DATA: i_lines LIKE sy-tabix.
Dados para mostrar o ALV
TYPE-POOLS: SLIS.
*DATA: int_fcat type SLIS_T_FIELDCAT_ALV with header line.
DATA: int_fcat type SLIS_T_FIELDCAT_ALV.
DATA: l_key TYPE slis_keyinfo_alv.
START-OF-SELECTION.
Ler dados para dentro da tabela imat
SELECT * FROM ZSLA_NIV_SAT
INTO CORRESPONDING FIELDS OF TABLE itab1
WHERE data in data
and lifnr in lifnr
and ebeln in ebeln
and werks in werks.
CLEAR: i_lines.
DESCRIBE TABLE itab1 LINES i_lines.
IF i_lines lt 1.
WRITE: / 'Não foram seleccionadas entradas.'.
EXIT.
ENDIF.
END-OF-SELECTION.
Agora, começa-se o ALV
Para usar o ALV, nós precisamos de uma estrutura do dicionário de
*dados DDIC ou de uma coisa chamada Fieldcatalogue.
Existe 2 maneiras de preencher a coisa referida acima:
*Automaticamente e Manualmente
Como preencher Automaticamente?
O fieldcatalouge pode ser gerado pela Função
*'REUSE_ALV_FIELDCATALOG_MERGE' a partir de uma tabela de qualquer fonte
Para que se possa utilizar esta função tabela tem que ter campos do
*dicionário de dados, como é o caso da tabela ITAB1
Guardar o nome do programa
i_repid = sy-repid.
Create Fieldcatalogue from internal table
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME =
i_repid
I_INTERNAL_TABNAME =
'ITAB1' "LETRAS GRANDES
I_INCLNAME =
i_repid
CHANGING
CT_FIELDCAT =
int_fcat[]
EXCEPTIONS
INCONSISTENT_INTERFACE =
1
PROGRAM_ERROR =
2
OTHERS =
3.
IF SY-SUBRC <> 0.
WRITE: / 'Returncode', sy-subrc,
'from FUNCTION REUSE_ALV_FIELDCATALOG_MERGE'.
ENDIF.
*Isto era o Fieldcatalogue
E agora estamos preparados para executar o ALV
Chama o ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = i_repid
IT_FIELDCAT = int_fcat[]
I_DEFAULT = ' '
I_SAVE = ' ' "'A'
TABLES
T_OUTTAB = itab1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
WRITE: /
'Returncode', sy-subrc, 'from FUNCTION REUSE_ALV_GRID_DISPLAY'.
ENDIF.
Please reward the helpful entries. -
Hi,
I created a class file and in constructor loading a XML file
and on Load of XML I am calling different function with in the same
class, but it is not executing can you please tell me where is the
problem.
Here is the code given below.
class myClass
private var myXML:XML;
public function myClass()
myXML.load("myXML")
myXML.onLoad = function()
displaText() // This is the function which is not calling
public function displaText()
trace("Welcome")
}It looks like you've got a scoping issue...
try:
var pointer:myClass=this;
myXML.onLoad=function(success){
if(success){
pointer.displaText();
}else{
// error handling
When you call a function within an onLoad event, that
function is scoped to the object being loaded. If you want to call
a method from another object (in this case from your 'myClass'
class), you need to use a reference to the object that contains the
function.
Don't forget to use the new XML constructor when
instantiating your XML object:
myXML= new XML();
Also... it's a best practices thing... you should capitalize
your class names (MyClass instead of myClass). You'd then likely
use the lower case (myClass) to name an instance of the class.
Cheers,
PPE -
Is it possible to pass an argument to the function triggered by an event handler?
Hello All,
Trying to migrate my way of thinking from AS2 to CS4/AS3.
Ok, I have 2 buttons on the stage. Each button does almost
the same thing, so I want to create a single function, and each
button calls that same function (we'll name that function
"Navigate")... however, the function will need to end up doing
something different dependant on which button was clicked.
So, previously, in AS2, I would've added some code onto the
buttons themselves with on(release) methods (see CODE EXAMPLE 1)
So, each button effectively calls the Navigate function, and
passes a different frame label to the function.
Now, I'm trying to recreate this functionality in AS3. As you
all know, on(release) has been done away with (still don't know
why), but we now have to use event handlers, so I'm trying to
figure out a way to pass a different frame label argument to the
Navigate function. Currently I can achieve that by using a switch
statement to test which button was clicked, and act accordingly
(see CODE EXAMPLE 2).
In this over-simplified example, this works fine, but in the
real world I'm going to have more than 2 buttons, and the Navigate
function would probably be much more complicated...
So, I would like to be able to pass an argument(s) (like in
the AS2 example) to the Navigate function... perhaps in the
addEventListener() method? I tried this, but got compiler errors
(see CODE EXAMPLE 3):
The Million Dollar Question:
Is it possible to dynamically pass/change an argument(s) to a
function which is triggered by an event listener? (Or is the event
that triggered the function the only argument you can have?)
If this isn't possible, I'd greatly like to hear how you
folks would handle this (other than having a switch statement with
12 cases in it)???I've found a couple solutions that I'll post below for
prosperity...
You could create a Dictionary keyed by the prospective event
targets and store any information in there you want associated with
them. Then the navigate function can check that dictionary to get
it's parameters:
// Code //
Button1.addEventListener(MouseEvent.CLICK, Navigate, false,
0, true);
Button2.addEventListener(MouseEvent.CLICK, Navigate, false,
0, true);
var buttonArgs:Dictionary = new Dictionary();
buttonArgs[Button1] = "FrameLabel1";
buttonArgs[Button2] = "FrameLabel2";
function Navigate(e:MouseEvent):void{
gotoAndStop(buttonArgs[e.target]);
This in my eyes, is about the same amount of work as writing
a long switch statement, but a little more elegant I suppose.
I had a little trouble understanding the next solution,
because I didn't quite understand an important piece of information
about event listeners. The addEventListener () requires a Function
as the 2nd argument passed to it.
It didn't quite click until someone pointed it out to me:
Navigate is a Function...
Navigate("FrameLabel1") is a Function
call...
So by writing just
Navigate, I'm not actually calling the function at the time
of the addEventListener call, I'm just supplying the event listener
with a reference to the name of the function. Then, when the
listener is triggered, the listener will call (and pass a
MouseEvent argument to) the Navigate function.
Conversely, by writing
Navigate("FrameLabel1") as the 2nd argument, the event
listener trys to execute the Navigate function at the time the
addEventListener is instantiated. And, since, in this example, the
Navigate function returned as ":void" a compile error would occur
because as I stated, an event listener requires a Function data
type as the 2nd argument. This would basically be like writing
addEventListener(MouseEvent.Click,
void, false, 0, true)
However, there is a way around this... basically, instead of
defining the Navigate function as returning a void data type, you
define it as returning a Function data type, and then nest another
function (which actually contains the actions you want to perform)
inside of it.
Button1.addEventListener(MouseEvent.CLICK,
Navigate("FrameLabel1"), false, 0, true);
Button2.addEventListener(MouseEvent.CLICK,
Navigate("FrameLabel2"), false, 0, true);
function Navigate(myLabel:String):Function{
return function(evt:MouseEvent):void{
gotoAndStop(myLabel); -
Revision: 3045
Author: [email protected]
Date: 2008-08-29 10:59:25 -0700 (Fri, 29 Aug 2008)
Log Message:
Fix FB-13900: Expression Evaluator: 'is' and 'as' expressions return 'Target player does not support function calls'
Ticket Links:
http://bugs.adobe.com/jira/browse/FB-13900
Modified Paths:
flex/sdk/trunk/modules/debugger/src/java/flash/tools/debugger/concrete/BinaryOp.java
flex/sdk/trunk/modules/debugger/src/java/flash/tools/debugger/concrete/PlayerSession.javaRevision: 3045
Author: [email protected]
Date: 2008-08-29 10:59:25 -0700 (Fri, 29 Aug 2008)
Log Message:
Fix FB-13900: Expression Evaluator: 'is' and 'as' expressions return 'Target player does not support function calls'
Ticket Links:
http://bugs.adobe.com/jira/browse/FB-13900
Modified Paths:
flex/sdk/trunk/modules/debugger/src/java/flash/tools/debugger/concrete/BinaryOp.java
flex/sdk/trunk/modules/debugger/src/java/flash/tools/debugger/concrete/PlayerSession.java -
How to call a C function calling a Java Method from another C function ?
Hi everyone,
I'm just starting to learn JNI and my problem is that I don't know if it is possible to call a C function calling a Java Method (or doing anything else with JNI) from another C function.
In fact, after receiving datas in a socket made by a C function, I would like to create a class instance (and I don't know how to do it too ; ) ) and init this instance with the strings I received in the socket.
Is all that possible ?
Thank you very much for your help !Hard to understand the question, but by most interpretations the answer is going to be yes.
You do of course understand that JNI is the "API" that sits between Java and C and that every call between the two must go through that. You can't call it directly. -
Is it possible to get the caller object in a function call hierarchy ?
Hi,
I have a problem in hand for adding a new functionality to an existing code with MINIMAL code change. For this I need to get some extra information in a function call from its caller. And for this I do not want to change the signature of the method, as it requires a lot of code change. So I need to have a programming facility by which I can get the object from which the function was invoked. Some thing like "{code}this.CALLEROBJECT{code}".
Please let me know whether we can achieve this in JAVA. I wonder if such a facility exists in any programming language...
Thanks in advance.
Regards
JobyNo.
Youd have to buy it Germany or see if an Apple Authrorized reseller in Singapore could order you the keyboard. -
I am experiencing this error with one of our cluster environment. Can anyone help me in this issue.
The Cluster Service function call 'ClusterResourceControl' failed with error code '1008(An attempt was made to reference a token that does not exist.)' while verifying the file path. Verify that your failover cluster is configured properly.
Thanks,
Venu S.
Venugopal S ----------------------------------------------------------- Please click the Mark as Answer button if a post solves your problem!Hi Venu S,
Based on my research, you might encounter a known issue, please try the hotfix in this KB:
http://support.microsoft.com/kb/928385
Meanwhile since there is less information about this issue, before further investigation, please provide us the following information:
The version of Windows Server you are using
The result of SELECT @@VERSION
The scenario when you get this error
If anything is unclear, please let me know.
Regards,
Tom Li -
Is there a way to avoid the function call ?
Given the following test case
CREATE USER TESTER
IDENTIFIED BY "tester"
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
GRANT CONNECT, RESOURCE TO TESTER
GRANT CREATE TYPE TO TESTER
GRANT CREATE SESSION TO TESTER
GRANT CREATE PROCEDURE TO TESTER
GRANT CREATE TABLE TO TESTER
GRANT UNLIMITED TABLESPACE TO TESTER
ALTER USER TESTER QUOTA UNLIMITED ON USERS
COMMIT
CONNECT TESTER/tester
CREATE OR REPLACE TYPE TESTER.PATTERN_LIST AS TABLE OF VARCHAR2(1023 CHAR)
SHOW ERRORS
CREATE TABLE TESTER.PARENT_TABLE
FIELD_ID NUMBER(10) NOT NULL,
FIELD_NAME VARCHAR2( 255 CHAR) NOT NULL,
FIELD_PATH VARCHAR2(1023 CHAR) NOT NULL,
FIELD_VALUE VARCHAR2( 255 CHAR)
CREATE TABLE TESTER.CHILD_TABLE
FIELD_PATH VARCHAR2(1023 CHAR) NOT NULL,
MIN_STR_LEN NUMBER(10),
MAX_STR_LEN NUMBER(10),
PATTERNS TESTER.PATTERN_LIST
NESTED TABLE PATTERNS STORE AS PATTERN_TABLE RETURN AS VALUE
ALTER TABLE TESTER.PARENT_TABLE ADD (
CONSTRAINT PARENT_TABLE_PK
PRIMARY KEY
(FIELD_ID))
INSERT ALL
INTO TESTER.PARENT_TABLE
VALUES (1, 'FIELD_A', '/A', NULL)
INTO TESTER.PARENT_TABLE
VALUES (2, 'FIELD_AB', '/A/B', '20090731')
INTO TESTER.PARENT_TABLE
VALUES (3, 'FIELD_AC', '/A/C', '2167')
INTO TESTER.PARENT_TABLE
VALUES (4, 'FIELD_AC', '/A/C', '1144')
INTO TESTER.PARENT_TABLE
VALUES (5, 'FIELD_AD', '/A/D', 'XS10')
INTO TESTER.PARENT_TABLE
VALUES (6, 'FIELD_AB', '/A/B', '20090229')
INTO TESTER.PARENT_TABLE
VALUES (7, 'FIELD_AD', '/A/D', 'ART')
INTO TESTER.PARENT_TABLE
VALUES (8, 'FIELD_AD', '/A/D', 'TESTED')
INTO TESTER.CHILD_TABLE
VALUES ('/A', NULL, NULL, PATTERN_LIST())
INTO TESTER.CHILD_TABLE
VALUES ('/A/B', NULL, NULL, PATTERN_LIST( '[12][0-9]{3}[0][13578]([0][1-9]|[12][0-9]|[3][01])'
, '[12][0-9]{3}[0][469]([0][1-9]|[12][0-9]|[3][0])'
, '[12][0-9]{3}[1][02][3][1]'
, '[12][0-9]{3}[1][1][3][0]'
, '[12][0-9]{3}[0][2][2][8]'
, '([2][048]|[1][26])([02468][048]|[13579][26])[0][2][2][9]'))
INTO TESTER.CHILD_TABLE
VALUES ('/A/C', NULL, NULL, PATTERN_LIST( '[0-1][0-9][0-5][0-9]'
, '[2][0-3][0-5][0-9]'))
INTO TESTER.CHILD_TABLE
VALUES ('/A/D', 3, 4, PATTERN_LIST('[^0-9]*'))
SELECT * FROM DUAL
CREATE OR REPLACE FUNCTION TESTER.MATCH_PATTERN(p_value IN VARCHAR2, p_patterns IN TESTER.PATTERN_LIST) RETURN NUMBER
AS
v_count NUMBER := 0;
BEGIN
SELECT COUNT(*)
INTO v_count
FROM TABLE(p_patterns)
WHERE REGEXP_SUBSTR(p_value, COLUMN_VALUE) = p_value;
RETURN v_count;
END MATCH_PATTERN;
SHOW ERRORS
COMMIT
/the query
SELECT FIELD_ID
, FIELD_PATH
, ERRINDEX
, FIELD_VALUE
FROM (
SELECT a.FIELD_ID
, a.FIELD_PATH
, b.PATTERNS
, CASE
WHEN ((b.MIN_STR_LEN IS NOT NULL) AND ((a.FIELD_VALUE IS NULL) OR (LENGTH(a.FIELD_VALUE) < b.MIN_STR_LEN))) THEN 1
END AS ERRINDEX_1
, CASE
WHEN ((b.MAX_STR_LEN IS NOT NULL) AND ((a.FIELD_VALUE IS NULL) OR (LENGTH(a.FIELD_VALUE) > b.MAX_STR_LEN))) THEN 2
END AS ERRINDEX_2
, CASE
WHEN ((b.PATTERNS IS NOT EMPTY) AND ((SELECT COUNT(*) FROM TABLE(b.PATTERNS) WHERE REGEXP_SUBSTR(a.FIELD_VALUE, COLUMN_VALUE) = a.FIELD_VALUE) = 0)) THEN 4
END AS ERRINDEX_4
, a.FIELD_VALUE
FROM TESTER.PARENT_TABLE a
INNER JOIN TESTER.CHILD_TABLE b ON a.FIELD_PATH = b.FIELD_PATH
UNPIVOT
ERRINDEX
FOR COL IN (ERRINDEX_1, ERRINDEX_2, ERRINDEX_4)
)gives me ORA-03113: end-of-file on communication channel
If on the other hand, I replace the nested single-row SELECT with the function call like this
SELECT FIELD_ID
, FIELD_PATH
, ERRINDEX
, FIELD_VALUE
FROM (
SELECT a.FIELD_ID
, a.FIELD_PATH
, b.PATTERNS
, CASE
WHEN ((b.MIN_STR_LEN IS NOT NULL) AND ((a.FIELD_VALUE IS NULL) OR (LENGTH(a.FIELD_VALUE) < b.MIN_STR_LEN))) THEN 1
END AS ERRINDEX_1
, CASE
WHEN ((b.MAX_STR_LEN IS NOT NULL) AND ((a.FIELD_VALUE IS NULL) OR (LENGTH(a.FIELD_VALUE) > b.MAX_STR_LEN))) THEN 2
END AS ERRINDEX_2
, CASE
WHEN ((b.PATTERNS IS NOT EMPTY) AND (TESTER.MATCH_PATTERN(a.FIELD_VALUE, b.PATTERNS) = 0)) THEN 4
END AS ERRINDEX_4
, a.FIELD_VALUE
FROM TESTER.PARENT_TABLE a
INNER JOIN TESTER.CHILD_TABLE b ON a.FIELD_PATH = b.FIELD_PATH
UNPIVOT
ERRINDEX
FOR COL IN (ERRINDEX_1, ERRINDEX_2, ERRINDEX_4)
)the query gives the correct results which should be
FIELD_ID FIELD_PATH ERRINDEX FIELD_VALUE
6 /A/B 4 20090229
3 /A/C 4 2167
5 /A/D 4 XS10
8 /A/D 2 TESTEDIs there a way to do this without the PL/SQL function call and at the same time avoid the ORA-03113 ? Or, have I hit a bug on 11.1.0.7 ?
Many thanks in advance
Best Regards
PhilipI found the Oracle Bug on my own in the end, in the most unlikely of places !
The following code
SELECT FIELD_ID
, FIELD_PATH
, ERRINDEX
, FIELD_VALUE
FROM (
SELECT a.FIELD_ID
, a.FIELD_PATH
, CASE
WHEN ((b.MIN_STR_LEN IS NOT NULL) AND ((a.FIELD_VALUE IS NULL) OR (LENGTH(a.FIELD_VALUE) < b.MIN_STR_LEN))) THEN 1
END AS ERRINDEX_1
, CASE
WHEN ((b.MAX_STR_LEN IS NOT NULL) AND ((a.FIELD_VALUE IS NULL) OR (LENGTH(a.FIELD_VALUE) > b.MAX_STR_LEN))) THEN 2
END AS ERRINDEX_2
, CASE
WHEN ((b.PATTERNS IS NOT EMPTY) AND ((SELECT COUNT(*) FROM TABLE(b.PATTERNS) WHERE REGEXP_SUBSTR(a.FIELD_VALUE, COLUMN_VALUE) = a.FIELD_VALUE) = 0)) THEN 4
END AS ERRINDEX_4
, a.FIELD_VALUE
FROM TESTER.PARENT_TABLE a, TESTER.CHILD_TABLE b
WHERE a.FIELD_PATH = b.FIELD_PATH
UNPIVOT
ERRINDEX
FOR COL IN (ERRINDEX_1, ERRINDEX_2, ERRINDEX_4)
)works as intended i.e. like a charm !
The only difference between the one that gives the ORA-03113 and the above is the way the join is written. The ANSI way (INNER JOIN) fails, the old way (WHERE clause) succeeds.
I will open a SR with Oracle so that it may be recorded and fixed.
Best Regards
Philip
Maybe you are looking for
-
Hi! I'm doing a cv template for my company so that Human Resourses can send to candidates. I made the form and I have a page for the "professional experience" area. This page is enough for a recent graduated student but not for a senior candidate (t
-
I have just bought Adobe Photoshop CC and Adobe Illustrator annual subscription both single user. Now after I downloaded the installer CreativeCloudSet-Up.EXE I noticed that Photoshop and Illustrator has a "INSTALL" buttons.. other application like A
-
Hi .. I am trying to install a printer ( Xerox C525A ) on an existing netwo
The netwotk is intact and I am simply replacing an older HP 2300 with the newer Xerox...C525A The problem is that I cannot see the printer over the network Are there any tricks I am missing here? Help most appreciated G5 dual core 2Ghz Mac OS X (10
-
Stone plus (with built-in speaker) can't connect to pc
6stone plus (with built-in speaker) can't connect to pcm hi, my creative stone plus with in built speaker got a problem, when I connect it to the pc it starts charging, but it isn't recognized in "my computer" ( my OS is windows xp), so I'm not able
-
Bluetooth Headset not working in safari?
my motorola h9 works great with itunes/quicktime, but when using it with Safari like watching a video in youtupe our listening to anything through safari i don't get any sound . i did some recearch and found software called Airfoil that send the audi