2
我創建基於下表上的表單:將圖像插入表中的Oracle APEX
CREATE TABLE "POSTS"
( "POST_ID" NUMBER(15,0) NOT NULL ENABLE,
"USER_ID" VARCHAR2(30) NOT NULL ENABLE,
"TITLE" VARCHAR2(255) NOT NULL ENABLE,
"TEXT" CLOB,
"RESPONSE_TO" NUMBER(15,0),
"FLAGGED" CHAR(1),
"MIMETYPE" VARCHAR2(50),
"LAST_UPDATE" DATE,
"THUMB" BLOB,
"IMAGE" "ORDSYS"."ORDIMAGE" ,
"FILENAME" VARCHAR2(255),
CONSTRAINT "POSTS_PK" PRIMARY KEY ("POST_ID")
USING INDEX ENABLE
)
/
ALTER TABLE "POSTS" ADD CONSTRAINT "POSTS_CON" FOREIGN KEY ("RESPONSE_TO")
REFERENCES "POSTS" ("POST_ID") ENABLE
/
CREATE INDEX "POSTS_TEXT_INDEX" ON "POSTS" ("TEXT")
INDEXTYPE IS "CTXSYS"."CONTEXT"
/
CREATE INDEX "POSTS_TITLE_INDEX" ON "POSTS" ("TITLE")
INDEXTYPE IS "CTXSYS"."CONTEXT"
/
CREATE OR REPLACE EDITIONABLE TRIGGER "BI_POSTS"
before insert on "POSTS"
for each row
begin
if :NEW."POST_ID" is null then
select "POSTS_SEQ".nextval into :NEW."POST_ID" from sys.dual;
end if;
end;
/
ALTER TRIGGER "BI_POSTS" ENABLE
/
CREATE OR REPLACE EDITIONABLE TRIGGER "NEW_POST"
BEFORE INSERT
ON posts
FOR EACH ROW
BEGIN
--l_image := ORDSYS.ORDImage.Init();
--ORDSYS.ORDImage.process(:new.image, 'maxscale=200 200');
:new.user_id := v(':APP_USER');
--process_post_image(:new.post_id);
END;
/
ALTER TRIGGER "NEW_POST" ENABLE
/
標題,文本和文件名字段的形式編輯。
要上傳下面的代碼是在定製過程中使用以代替自動生成的插入代碼的文件:
DECLARE
l_upload_size INTEGER;
l_upload_blob BLOB;
l_image_id NUMBER;
l_image ORDSYS.ORDImage;
BEGIN
--
-- Get the BLOB of the new image from the APEX_APPLICATION_TEMP_FILES (synonym for WWV_FLOW_TEMP_FILES)
-- APEX 5.0 change from APEX_APPLICATION_FILES which has been deprecated
-- APEX_APPLICATION_TEMP_FILES has fewer columns and is missing doc_size
--
SELECT
blob_content
INTO
l_upload_blob
FROM
apex_application_temp_files
WHERE
name = :P16_FILENAME;
--
-- Insert a new row into the table, initialising the image and
-- returning the newly allocated image_id for later use
--
INSERT
INTO
posts
(
post_id,
title,
text,
filename,
image
)
VALUES
(
posts_seq.nextval,
:P16_TITLE,
:P16_TEXT,
:P16_FILENAME,
ORDSYS.ORDImage()
)
RETURNING
post_id, image
INTO
l_image_id, l_image;
-- find the size of BLOB (get doc_size)
l_upload_size := dbms_lob.getlength(l_upload_blob);
-- copy the blob into the ORDImage BLOB container
DBMS_LOB.COPY(l_image.SOURCE.localData, l_upload_blob, l_upload_size);
-- set the image properties
l_image.setProperties();
UPDATE
posts
SET
image = l_image -- original ORDImage image
WHERE
post_id = l_image_id;
END;
但是產生以下錯誤:
Invalid action CREATE on this object. (D)
我也是能夠使用Update查詢從BLOB中設置ORDImage,但之後我無法像用戶一樣使用ORDImage的實際功能,例如'select post_id,t.image.getfileformat(),t.image.getcompressionformat(),t.image.getcontentformat() ,t.image.getcon如果你或@HedgepigMatt有任何想法,請幫助我,如果可能的話,我正在嘗試通過Apex Form頁面直接將圖像存儲到ORDImage的方法。 另外我想知道這個BLOB到ORDImage的過程是否會影響上傳媒體的質量? –
ORDImages只是存儲更深一層的blob。當您嘗試該功能時發生了什麼? – Scott