我正在尝试使用 Oracle Database 12c 企业版版本 12.2.0.1.0 - 64 位生产创建 Oracle 网络模型来分析光纤通信网络。 所有步骤都是成功的,直到我调用 SDO_NET.FIND_CONNECTED_COMPONENTS ,它总是失败,并出现通用的“调用中参数的数量或类型错误”。
我希望有人能指出如何纠正这个问题。
以下是重现问题的步骤。
-- Create a network
EXEC SDO_NET.CREATE_SDO_NETWORK('TEST2',1,FALSE,FALSE);
-- verify metadata created
SELECT * FROM USER_SDO_NETWORK_METADATA;
-- verify Node, Link and Path tables created
DESCRIBE TEST2_NODE$;
DESCRIBE TEST2_LINK$;
DESCRIBE TEST2_PATH$;
-- Insert spatial metadata for each
INSERT INTO USER_SDO_GEOM_METADATA VALUES (
'TEST2_NODE$',
'GEOMETRY',
MDSYS.SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT('X', 200000.0, 1900000.0, 0.0005),
MDSYS.SDO_DIM_ELEMENT('Y', 300000.0, 1800000.0, 0.0005)
),
3005
);
INSERT INTO USER_SDO_GEOM_METADATA VALUES (
'TEST2_LINK$',
'GEOMETRY',
MDSYS.SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT('X', 200000.0, 1900000.0, 0.0005),
MDSYS.SDO_DIM_ELEMENT('Y', 300000.0, 1800000.0, 0.0005)
),
3005
);
INSERT INTO USER_SDO_GEOM_METADATA VALUES (
'TEST2_PATH$',
'GEOMETRY',
MDSYS.SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT('X', 200000.0, 1900000.0, 0.0005),
MDSYS.SDO_DIM_ELEMENT('Y', 300000.0, 1800000.0, 0.0005)
),
3005
);
-- validate
SELECT SDO_NET.validate_network('TEST2') FROM DUAL;
-- TRUE
-- Create minimal network example
--node1
INSERT INTO TEST2_NODE$ (node_id, node_name, geometry) VALUES (2,'BL-OR',MDSYS.SDO_GEOMETRY(2001, 3005, MDSYS.SDO_POINT_TYPE(1208829.98094467, 483100.114700435, NULL), NULL, NULL));
--node2
INSERT INTO TEST2_NODE$ (node_id, node_name, geometry) VALUES (6,'BL-OR',MDSYS.SDO_GEOMETRY(2001, 3005, MDSYS.SDO_POINT_TYPE(1208390.49330847, 479562.751714209, NULL), NULL, NULL));
--node3
INSERT INTO TEST2_NODE$ (node_id, node_name, geometry) VALUES (10,'BL-OR',MDSYS.SDO_GEOMETRY(2001, 3005, MDSYS.SDO_POINT_TYPE(1210090.56995981, 478616.028058535, NULL), NULL, NULL));
--link1 (node1 - node2)
INSERT INTO TEST2_link$ (link_id, link_name, start_node_id, end_node_id, COST, LINK_LEVEL , geometry) VALUES
(2,'BL-OR',2,6,1,1,
MDSYS.SDO_GEOMETRY(2006, 3005, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 2, 1), MDSYS.SDO_ORDINATE_ARRAY(1208829.98094467, 483100.114700435, 1208390.49330847, 479562.751714209)));
--link2 (node2- node3)
INSERT INTO TEST2_link$ (link_id, link_name, start_node_id, end_node_id, cost, geometry) VALUES
(6,'BL-OR',6,10,0,
MDSYS.SDO_GEOMETRY(2006, 3005, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 2, 1), MDSYS.SDO_ORDINATE_ARRAY(1208390.49330847, 479562.751714209, 1210090.56995981, 478616.028058535)));
-- verify network
SELECT SDO_NET.validate_network('TEST2') FROM DUAL;
-- TRUE
SELECT SDO_NET.GET_NO_OF_NODES('TEST2') FROM DUAL;
-- 3
SELECT SDO_NET.GET_NO_OF_LINKS('TEST2') FROM DUAL;
-- 2
SELECT SDO_NET.GET_ISOLATED_NODES('TEST2') FROM DUAL;
-- null
SELECT SDO_NET.GET_INVALID_LINKS('TEST2') FROM DUAL;
-- null
SELECT SDO_NET.GET_NODE_DEGREE('TEST2', 6) FROM DUAL;
-- 2
-- Find connected components T
EXECUTE SDO_NET.FIND_CONNECTED_COMPONENTS('TEST2');
/* THIS FAILS WITH THE FOLLOWING ERROR
Error starting at line : 2 in command -
BEGIN SDO_NET.FIND_CONNECTED_COMPONENTS('TEST2'); END;
Error report -
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'FIND_CONNECTED_COMPONENTS'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
*/
如果您没有阅读全部内容,看起来 SDO_NET.FIND_CONNECTED_COMPONENTS 文档会产生误导。
它说语法是
SDO_NET.FIND_CONNECTED_COMPONENTS(network IN VARCHAR2);
但进一步阅读(以及示例)会揭示更多参数,例如
EXECUTE SDO_NET.FIND_CONNECTED_COMPONENTS(
network => 'SDO_PARTITIONED',
link_level => 1,
component_table_name => 'sdo_partitioned_conn_comp_tab',
log_loc => 'LOG_DIR',
log_file => 'sdo_partitioned.log',
open_mode => 'a');
这意味着您遇到的错误不是关于错误的类型,而是错误的参数数量。
查看文档,它描述了参数的含义,然后尝试修复您要执行的语句。