非 Apex PL/SQL 应用程序中的文件上传已迁移到 ORDS

File uploads in a non-Apex PL/SQL application migrated to ORDS

Oracle 官方文档 1982130.1 描述了目前阻止我们从 mod_plsql 迁移到 ORDS 的缺失特性:

Migrate a Non-Apex PL/SQL application from Oracle HTTP Server to Oracle REST Data Services (ORDS) 2.0.9. When running the PL/SQL application with Oracle REST Data Services, got the following error message: "ORA-20888: p_application_id must be provided" error in catalina.out regardless of the value of that parameter.

其他人如何将非 Apex 应用程序从 mod-plsql 迁移到 ORDS?

ORDS 18.3+ 逻辑发生了变化,使非顶点更容易。这是流程图中的新逻辑,希望能让它更容易理解。

在 18.3 之前及以下版本中,这是完成相同操作的方法 >

现在要抓住的是有一个 hacky 解决方法来让它工作,那就是假装 apex 太旧而无法使用该代码路径。 (是的是的我会解决这个问题)

在连接池文件中配置的数据库用户中,创建此视图。该代码检查是否安装了 apex 4+ 以使用它。这个视图是如何检查的,所以强制 ords to thing apex is old 将使普通的 'ol DOC Table 路径被使用。

create view apex_release as
  select '1.0.0.0' VERSION_NO from dual;

url-mapping.xml

<?xml version="1.0" encoding="UTF-8"?>
<pool-config xmlns="http://xmlns.oracle.com/apex/pool-config">
   <pool base-path="/klrice" name="klrice" />
</pool-config>

conf/klrice.xml

参数名为apex.docTable,此默认为"FLOWS_FILES.WWV_FLOW_FILE_OBJECTS$"

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
  <entry key="db.username">klrice</entry>
  <entry key="db.password">klrice</entry>
  <entry key="apex.docTable">klrice.MYDOCTABLE</entry>
</properties>

我的Table

KLRICE@xe >CREATE TABLE MYDOCTABLE (
  2    NAME               VARCHAR(256)   UNIQUE NOT NULL, 
  3    MIME_TYPE          VARCHAR(128), 
  4    DOC_SIZE           NUMBER, 
  5    DAD_CHARSET        VARCHAR(128), 
  6    LAST_UPDATED       DATE, 
  7    CONTENT_TYPE       VARCHAR(128), 
  8    CONTENT            LONG RAW, 
  9*   BLOB_CONTENT       BLOB );

被调用后:

  1* select BLOB_CONTENT from MYDOCTABLE
KLRICE@xe >/

BLOB_CONTENT                                                                    
--------------------------------------------------------------------------------
89504E470D0A1A0A0000000D49484452000000C8000000C80806000000AD58AE9E00000001735247