2016-12-21 2 views
0

Ich mache eine Prozedur innerhalb eines Oracle-Formulars, das ein Backtracking aufruft, das in eine Tabelle (die Lösungstabelle) einfügt. Dieses Backtracking wird von einem Varray (ítem_array) von Elementen (Beans) gespeist. Problem ist, dass der Compiler sagt, dass es keinen Funktionsnamen gibt.Oracle Forms Compiler markieren einen Typ als Funktion

vorhandene Objekte in der Datenbank:

CREATE TYPE item IS object(NUM_OPERACIO NUMBER, TITULS NUMBER); 
CREATE TYPE item_array IS VARRAY(1000) OF item; 
create table my_table (NUM_OPERACIO NUMBER, TITULS NUMBER); 
insert into my_table (NUM_OPERACIO,TITULS) values (1,10); 
insert into my_table (NUM_OPERACIO,TITULS) values (2,20) 
insert into my_table (NUM_OPERACIO,TITULS) values (3,30) 

Verfahren

PROCEDURE solver 
IS 
    arr item_array; 
BEGIN 

    SELECT item(NUM_OPERACIO,TITULS) 
    BULK COLLECT INTO arr 
    FROM my_table; 

    delete from solucion ; 

    backtra(arr,1,0,30); 
END; 

Was kann ich tun, dieses Problem zu lösen?

+0

Das sieht gut aus, solange alles im selben Schema (oder Privilegien etc. richtig eingerichtet) ist, und die Typen wurden erfolgreich erstellt. Was ist der vollständige Fehlermeldungsstapel, den Sie erhalten? –

+0

Fehler591. Diese Funktion wird von Client-installierten Programmen nicht unterstützt. Fehler 222. In diesem Bereich gibt es keinen Funktionsnamen. Fehler 0. Aussage ignorieren. –

+0

Unter welchem ​​Schema haben Sie die Objekte 'item',' item_array' und 'my_table' erstellt? Stellen Sie sicher, dass diese Objekte Synonyme für APPS aufweisen oder dass sie für das Standardschema von Oracle Forms ("APPS") nicht sichtbar sind. –

Antwort

0

Das ist eine PLS-Fehlernummer. Von the documentation:

„PLS-00591: Diese Funktion wird nicht unterstützt, in clientseitige Programme
Ursache: Pragma AUTONOMOUS_TRANSACTION, dynamische SQL-Anweisungen (zB EXECUTE: Eine der folgenden Funktionen wurde in einem falschen Kontext verwendet IMMEDIATE) und Bulk-Bindungen. Diese aufgeführten Funktionen können nur in serverseitigen Programmen, nicht aber in clientseitigen Programmen verwendet werden. "

Ihr Code verwendet eine Bulk-Bindung, so dass der Fehler passt. Formulare PL/SQL und Datenbank PL/SQL sind ähnlich, aber sie verwenden unterschiedliche Engines, und Features, die in beiden unterstützt werden, sind nur eine Untermenge aller Features in beiden. Die Lösung besteht darin, die Array-Population in eine Datenbankprozedur zu überführen und sie bei Bedarf aus Forms aufzurufen.

Ohne genau zu wissen, welches Problem Sie lösen möchten, ist es schwieriger, eine bessere Antwort zu geben.

Verwandte Themen