我试图通过在Oracle中创建的语义模型上运行语义相关的SQL来探索Oracle数据库的语义特性。但我无法做到这一点,并且关于这方面的信息很少。Oracle 11g2是否支持用于sem_match函数的游标?
该过程的功能很简单,可以从sparql查询中获取结果集。
CREATE OR REPLACE PROCEDURE PROC_MERGE_PATHWAY_SEM AS
TYPE c_type IS REF CURSOR;
semCursor c_type;
p1 VARCHAR2(40);
p2 VARCHAR2(40);
interCount INTEGER;
BEGIN
OPEN semCursor FOR
'SELECT p1, p2, COUNT(g) as interCount
FROM TABLE (sem_match (
"{?p1 <http://example.com/test.owl#relates_to> ?g . ?p2 <http://example.com/test.owl#relates_to> ?g }",
sem_models("pathway"),
null,
null,
null))';
LOOP
FETCH semCursor INTO p1, p2, interCount;
EXIT WHEN semCursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(p1||','||p2||','||interCount);
END LOOP;
/*
FOR records IN semCursor LOOP
DBMS_OUTPUT.PUT_LINE('test');
END LOOP; */
END PROC_MERGE_PATHWAY_SEM;
编译错误如下:
ORA-00972:标识符太长
ORA-06512:在 “SYSTEM.PROC_MERGE_PATHWAY_SEM”,第9行
ORA-06512:在第2行
我不确定是否由游标语句包装的sem_match语法错误或Oracle 11g2中的错误引起的?有人可以帮助我吗?谢谢。
你真的需要围绕select语句的引号吗? – Mat 2012-07-11 21:08:39
如果我不放''引号,它将两个Sparql查询语句视为一个整体字符串,这会导致“标识符太长”错误。 – Peiqin 2012-07-12 14:40:06
嗨,马特,我知道我不应该把'''引号围绕select语句,但我根据这个页面做了修改[线程:SEM_MATCH导致错误,ORA-22905](https://forums.oracle。 com/forums/thread.jspa?messageID = 4561450),它只能让我的程序成功编译,但运行时会出现上述错误。 – Peiqin 2012-07-12 14:45:10