ОК, эта ошибка становится реальной, я ничего не получаю от Oracle, функция будет компилироваться, но дает предупреждение, а затем, если я попытаюсь использовать ее, сообщение о недопустимом состоянии. Теперь вот настоящая руб. Если я «перекодирую» его как анонимную программу, он отлично работает! Поэтому где-то в моей декларации должна быть ошибка, так как она содержит единственное реальное различие между функцией Create и анонимной программой. Код для обоих ниже, и да, я знаю, что есть более простые способы изменить строку, это назначение класса, и мы не можем использовать встроенную функцию обратного преобразования строк. Любая помощь приветствуется!Ошибка Oracle недопустимого состояния
как анонимная ПРОГРАММА: (Примечание: это работает отлично)
DECLARE
strBinary varchar2(32);
intAnswer number := 0;
intExponent number := 0;
strReverse varchar2(32);
strLength number := 0;
intBinChar number := 0;
BinChar char;
BEGIN
dbms_output.enable;
-- Reverse the Binary String first using similar function to Reversed_Name
strBinary := ('11111111');
strLength := Length(StrBinary) + 1;
FOR i IN 1..strLength LOOP
BinChar := SUBSTR(strBinary,strLength-i,1);
strReverse := strReverse || BinChar;
END LOOP;
--Extract the binary character from the reversed string and do the math
FOR i IN REVERSE 1..LENGTH(strReverse)-1 LOOP
BinChar := SUBSTR(strReverse, i, 1);
intExponent := i - 1;
intBinChar := TO_NUMBER(BinChar);
intAnswer := intAnswer + (intBinChar * (2 ** intExponent));
END LOOP;
-- RETURN intAnswer;
dbms_output.put_line(intAnswer);
END;--RKC_BinToInt;
И здесь это функция, которая недействительна:
CREATE OR REPLACE FUNCTION RKC_BinToInt(strBinary IN varchar2(32) RETURN number IS
intExponent number := 0;
strReverse varchar2(32);
strLength number := 0;
intBinChar number := 0;
BinChar char;
BEGIN
-- Initialize Reverse the Binary String first using similar function to Reversed_Name
intAnswer := 0;
strLength := Length(StrBinary) + 1;
FOR i IN 1..strLength LOOP
BinChar := SUBSTR(strBinary,strLength-i,1);
strReverse := strReverse || BinChar;
END LOOP;
--Extract the binary character from the reversed string and do the math
FOR i IN REVERSE 1..LENGTH(strReverse)-1 LOOP
BinChar := SUBSTR(strReverse, i, 1);
intExponent := i - 1;
intBinChar := TO_NUMBER(BinChar);
intAnswer := intAnswer + (intBinChar * (2 ** intExponent));
END LOOP;
RETURN intAnswer;
END RKC_BinToInt;
/
параметры функции в оракула не должны иметь размер. change 'varchar2 (32)' to 'varchar2' – Exhausted
Используйте' SHOW ERRORS' для получения фактических ошибок компиляции. «Недопустимое состояние» означает просто «ошибка компиляции». –