尝试创建图像对象时出错(ORA-06512:在 "ORDSYS.SI_STILLIMAGE",第 14 行)

error when trying to create Image Object (ORA-06512: at "ORDSYS.SI_STILLIMAGE", line 14)

在 Oracle Database 19c 中,我无法创建 ORDSYS.SI_StillImage()(在加载了以前数据库版本的许多图像上进行了尝试)。 相同的代码适用于 Oracle 12c。

我在 2 个单独的 Oracle 19c 安装上尝试了这个,但出现了同样的错误。

这是测试示例:

甲骨文 19c

u@db19> SELECT BANNER_FULL FROM v$version;

BANNER_FULL
----------------------------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0


u@db19> DECLARE
  2    l_raw raw(32767);
  3    l_stillImage  ORDSYS.SI_StillImage;
  4  BEGIN
  5    l_raw := 'FFD8FFE000104A46494600010101004800480000FFDB00430006040506050406060506070706080A100A0A09090A140E0F0C1017141818171416161A1D251F1A1B231C1616202C20232627292A29191F2D302D283025282928FFDB0043010707070A080A130A0A13281A161A2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828FFC00011080014001403012200021101031101FFC4001800010101010100000000000000000000000007080305FFC4002C10000103030203060700000000000000000102030400051112130607311421224151B1153233617191F0FFC400160101010100000000000000000000000000040305FFC4001C1100030100020300000000000000000000000102031113313261FFDA000C03010002110311003F00AEF34EE721FB83764624BF1D9D80FBDB0A29539A8A825248EFD3E139F5A8DE8BBF062FE2D63B83E24B4ADD533A8ED3C9CF890A4F4208F3EA3A8AAD73BEDA8DB8971712F14287673B2AD2750CA939FB7CD52792B8EF34E3AA43A429AD214A57418C778F5A054D7655335F251582492FA6A6B6CB6E7DBA2CC67E948692F23F0A008F7A578BC0778B5DDB85E12EC8F39221C7426285A995B67520049185007BBF54A7992FC9C799E80BE02BC838076320E904A4E4608C82323D6A1DCB1B5B3C5B7B306ECB77B33414AD2C908D783E671ED8A52A37EC84E0DACEB8348DBA0C6B6C2661C1650C46693A50DA06001FDE74A52AC14FFFD9';
  6    l_stillImage := NEW SI_StillImage(to_blob(l_raw));
  7    --
  8    dbms_output.put_line('height: '||l_stillImage.height_SI);
  9    dbms_output.put_line('width: '||l_stillImage.width_SI);
 10    dbms_output.put_line('format: '||l_stillImage.format_SI);
 11    dbms_output.put_line('mime: '||l_stillImage.mimeType_ora);
 12  END;
 13  /
DECLARE
*
ERROR at line 1:
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "ORDSYS.SI_STILLIMAGE", line 14
ORA-06512: at line 6

甲骨文 12c


su@db12> SELECT * FROM v$version;

BANNER                                                                                    CON_ID
-------------------------------------------------------------------------------- ---------------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production                   0
PL/SQL Release 12.1.0.2.0 - Production                                                         0
CORE    12.1.0.2.0      Production                                                                     0
TNS for Linux: Version 12.1.0.2.0 - Production                                                 0
NLSRTL Version 12.1.0.2.0 - Production                                                         0

su@db12> DECLARE
  2    l_raw raw(32767);
  3    l_stillImage  ORDSYS.SI_StillImage;
  4  BEGIN
  5    l_raw := 'FFD8FFE000104A46494600010101004800480000FFDB00430006040506050406060506070706080A100A0A09090A140E0F0C1017141818171416161A1D251F1A1B231C1616202C20232627292A29191F2D302D283025282928FFDB0043010707070A080A130A0A13281A161A2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828FFC00011080014001403012200021101031101FFC4001800010101010100000000000000000000000007080305FFC4002C10000103030203060700000000000000000102030400051112130607311421224151B1153233617191F0FFC400160101010100000000000000000000000000040305FFC4001C1100030100020300000000000000000000000102031113313261FFDA000C03010002110311003F00AEF34EE721FB83764624BF1D9D80FBDB0A29539A8A825248EFD3E139F5A8DE8BBF062FE2D63B83E24B4ADD533A8ED3C9CF890A4F4208F3EA3A8AAD73BEDA8DB8971712F14287673B2AD2750CA939FB7CD52792B8EF34E3AA43A429AD214A57418C778F5A054D7655335F251582492FA6A6B6CB6E7DBA2CC67E948692F23F0A008F7A578BC0778B5DDB85E12EC8F39221C7426285A995B67520049185007BBF54A7992FC9C799E80BE02BC838076320E904A4E4608C82323D6A1DCB1B5B3C5B7B306ECB77B33414AD2C908D783E671ED8A52A37EC84E0DACEB8348DBA0C6B6C2661C1650C46693A50DA06001FDE74A52AC14FFFD9';
  6    l_stillImage := NEW SI_StillImage(to_blob(l_raw));
  7    --
  8    dbms_output.put_line('height: '||l_stillImage.height_SI);
  9    dbms_output.put_line('width: '||l_stillImage.width_SI);
 10    dbms_output.put_line('format: '||l_stillImage.format_SI);
 11    dbms_output.put_line('mime: '||l_stillImage.mimeType_ora);
 12  END;
 13  /
height: 20
width: 20
format: JFIF
mime: image/jpeg

PL/SQL procedure successfully completed.

ORDSYS 包是 'Oracle Multimedia' 的一部分,19c 中的变化之一是 Oracle Multimedia 不再起作用(参见 https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/behavior-changes-deprecated-desupport-oracle-database.html#GUID-BABC1C60-EA07-4EBE-8C67-B69B59E4F742

因此,根据上述 link 的建议(并在下面复制到本地),您需要将图像移动到 LOB(CLOB、BLOB、SecureFile LOB)并使用另一种方法来处理它们。

下面引用了上面的页面

Oracle Multimedia will be removed in Oracle Database 19c When you upgrade or migrate your database to Oracle 19c, then Oracle Multimedia APIs will be still exist but won’t function anymore.

Desupport of Oracle Multemedia

Oracle Multimedia is desupported in Oracle Database 19c, and the implementation is removed.

As an alternative for image processing and conversion, Oracle recommends that you store multimedia content in SecureFiles LOBs, and use third party products, such as Piction. The ORDIM component remains in the registry and still has a VALID status. Oracle Multimedia objects and packages remain in the database. However, these objects and packages no longer function, and raise exceptions if there is an attempt made to use them. Oracle Locator is not affected by the desupport of Oracle Multimedia.