Я пытаюсь выполнить EXECUTE IMMEDIATE Statement. Но я получаю следующую ошибку. Я пытаюсь это как новое, я читаю существующие сообщения.Выполнение немедленного Oracle
Я пробую это, увидев приведенные ниже примеры. http://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems017.htm
Это говорит недопустимое имя таблицы, но таблица присутствует
Connecting to the database Local
ORA-00903: invalid table name
ORA-06512: at "MMM.Maxtable", line 26
ORA-06512: at line 9
CNTRYCNTRYID
SELECT MAX(:1) FROM :2 WHERE :1 <= 99999
Process exited.
Disconnecting from the database oraclesrv.local.
Я передаю Cntry AS TABLE NAME, CNTRYID AS ColumnName
Create OR REPLACE PROCEDURE Maxtable
(ITableName VarChar2,
IColumnName VarChar2)
AS
Limit1 int;
RESULT1 INT;
Query1 varChar(255);
TableName VarChar(50);
ColumnName VarChar(50);
BEGIN
Limit1 := 99999;
MaxTableId := 0;
Result1 := 0;
TableName := ltrim(rtrim(ITableName));
ColumnName := ltrim(rtrim(iColumnName));
DBMS_OUTPUT.PUT_LINE(TableName || ColumnName);
IF (TableName is not null and ColumnName is not null) then
Query1 := 'SELECT MAX(:1) FROM :2 WHERE :1 <= 99999' ;
DBMS_OUTPUT.PUT_LINE(Query1);
EXECUTE IMMEDIATE Query1 INTO Result1 USING ColumnName, TableName;
END IF;
DBMS_OUTPUT.PUT_LINE(Result1);
MaxTableId := Result1;
IF (MaxTableId = Limit1) THEN
MaxTableId := -1;
ELSE
MaxTableId := MaxTableId + 1 ;
END IF;
END adm_getMaxTableIdLimited;
Я попробовал этот вариант также, его не работает.
Подключение к базе данных. ОР-00905: отсутствуют ключевое слово ОР-06512: на "mmm.Maxtable", строка 19 ОР-06512: в строке 9 SELECT MAX (CNTRYID) в result1 ОТ Cntry ГДЕ CNTRYID < = 99999 Процесс завершается. Отключение из базы данных oraclesrv.local.
Create OR REPLACE PROCEDURE Maxtable
(TableName VarChar2,
ColumnName VarChar2,
MaxTableId OUT Int)
AS
Limit1 int;
RESULT1 INT;
Query1 varChar(255);
BEGIN
Limit1 := 99999;
MaxTableId := 0;
Result1 := 0;
IF (TableName is not null and ColumnName is not null) then
Query1 := 'SELECT max(' || ColumnName || ') INTO Result1' || ' FROM ' || TableName || ' WHERE ' || ColumnName || ' <= ' || 99999 ;
DBMS_OUTPUT.PUT_LINE(Query1);
EXECUTE IMMEDIATE Query1;
END IF;
DBMS_OUTPUT.PUT_LINE(Result1);
MaxTableId := Result1;
IF (MaxTableId = Limit1) THEN
MaxTableId := -1;
ELSE
MaxTableId := MaxTableId + 1 ;
END IF;
END Maxtable;
Я попытался thisoption это тоже не работает. Подключение к базе данных oraclesrv.local. ОР-00905: отсутствует ключевое слово ОР-06512: на "mmm.Maxtable", строка 19 ОР-06512: в строке 9 SELECT MAX (CountryId) в result1 ОТ Cotry ГДЕ CNTRYID <= 99999 Процесс завершается. – user3127462
Я не уверен, что вы можете использовать SELECT INTO в EXECUTE IMMEDIATE. Вы должны использовать INTO EXECUTE IMMEDIATE, например, ссылку: EXECUTE IMMEDIATE sql_stmt INTO emp_rec ИСПОЛЬЗОВАНИЕ emp_id; –