我现在用的是DBLINK远程连的数据库。
在开发程序时用PL/SQL写个ETL过程,在判断远程数据表是否存在的地方停住了。
我现在知道在ALL_TABLES中可以看到本地的表名。但在远程我写了一个游标
CURSOR CUR_TEST IS
SELECT TABLE_NAME
FROM ALL_TABLES@DDDDDD 是我的一个参数。这样就报错!请高手指教!学习中
在开发程序时用PL/SQL写个ETL过程,在判断远程数据表是否存在的地方停住了。
我现在知道在ALL_TABLES中可以看到本地的表名。但在远程我写了一个游标
CURSOR CUR_TEST IS
SELECT TABLE_NAME
FROM ALL_TABLES@DDDDDD 是我的一个参数。这样就报错!请高手指教!学习中
在远程数据库里面就不需要@啦。
检查下dblink的那个用户有没有权限select all_tables。
是这样的。我本机是准备通过DBLINK对数据表数据进行全量的抽取,我在删除之前要判断远程的表是否能访问到,要不删除去会出现问题,但在判断表存在时两个参数1表名、2DBLINK名
CURSOR CUR_TEST IS
SELECT TABLE_NAME
FROM ALL_TABLES@DBLINK名
where table_name=表名
这样会报错。在DBLINK名处报缺少表达式错。
1 declare
2 cursor cur is
3 select table_name from all_tables@dblink_test01;
4 begin
5 for rec in cur loop
6 dbms_output.put_line(rec.table_name);
7 end loop;
8* end;
[TEST@ora10gr1#2009-12-11/08:25:13] SQL>/
DUAL
SYSTEM_PRIVILEGE_MAP
TABLE_PRIVILEGE_MAP
STMT_AUDIT_OPTION_MAP
AUDIT_ACTIONS
SCHEDULER$_JOB_STEP_STATE
AW$EXPRESS
AW$AWMD
AW$AWCREATE
AW$AWXML
OLAPI_HISTORY
OLAPI_SESSION_HISTORY
OLAPI_IFACE_OBJECT_HISTORY
OLAPI_IFACE_OP_HISTORY
OLAPI_MEMORY_OP_HISTORY
OLAPI_MEMORY_HEAP_HISTORY
OLAP_OLEDB_KEYWORDS
OLAP_OLEDB_MDPROPVALS
OLAP_OLEDB_MDPROPS
OLAP_OLEDB_FUNCTIONS_PVT
DEF$_TEMP$LOB
HELP
MVIEW$_ADV_INDEX
MVIEW$_ADV_PARTITION
DM$RESULT_PROPERTY
DM$PMML_DTD
DM$APPLY_CONTENT_ITEM
DM$APPLY_CONTENT_SETTING
DM$APPLY_CONTENT_SETTING_ARRAY
DM$ATTRIBUTE
DM$ATTRIBUTE_PROPERTY
DM$CATEGORY
DM$CATEGORY_EX
DM$CATEGORY_SET
DM$CATEGORY_MATRIX_ENTRY
DM$PRIOR_PROBABILITY_ENTRY
DM$LIFT_RESULT_ENTRY
DM$MODEL_PROPERTY
DM$MODEL_PROPERTY_ARRAY
DM$SETTING
DM$SETTING_ARRAY
DM$SETTINGS_MAP
WM$WORKSPACES_TABLE
WM$VERSION_TABLE
WM$NEXTVER_TABLE
WM$VERSION_HIERARCHY_TABLE
CS_SRS
OGIS_SPATIAL_REFERENCE_SYSTEMS
SDO_DIST_UNITS
SDO_AREA_UNITS
USER_CS_SRS
USER_TRANSFORM_MAP
SDO_ANGLE_UNITS
SDO_ELLIPSOIDS
SDO_PROJECTIONS
SDO_DATUMS
SDO_GEOR_XMLSCHEMA_TABLE
SDO_CMT_CBK_FN_TABLE
DR$OBJECT_ATTRIBUTE
DR$POLICY_TAB
DR$NUMBER_SEQUENCE
WK$SUBSCRIBER_LIST
WK$SYS_CONFIG
WK$CRAWLER_CONFIG_DEFAULT
WK$DEFAULT_DATA_SOURCE_TYPE
WK$DEFAULT_DATA_SOURCE_PARAM
WK$MIMETYPES
WK$CHARSET
WK$LANG
WK$DOC_LANG
WK$ACL_SNAPSHOT
T1
T2
CWM2$_AW_NEXT_TEMP_CUST_MEAS
CWM2$_AW_TEMP_CUST_MEAS_MAP
CWM2$_TEMP_VALUES
CWM2$AWDIMCREATEACCESS
CWM2$AWCUBECREATEACCESS
OLAP_SESSION_DIMS
OLAP_SESSION_CUBES
SDO_TXN_IDX_DELETES
SDO_TXN_IDX_EXP_UPD_RGN
SDO_GR_MOSAIC_0
SDO_GR_MOSAIC_1
SDO_GR_MOSAIC_2
SDO_GR_MOSAIC_3
SDO_TOPO_TRANSACT_DATA
SDO_TOPO_RELATION_DATA
SDO_TOPO_DATA$
SDO_TXN_IDX_INSERTS
SDO_CMT_CBK_DML_TABLE
OL$
OL$HINTS
OL$NODES
MVIEW$_ADV_OWB
PSTUBTBL
ODCI_SECOBJ$
ODCI_WARNINGS$
KU$NOEXP_TAB
PLAN_TABLE$
OLAPTABLEVELS
OLAPTABLEVELTUPLESPL/SQL procedure successfully completed.[TEST@ora10gr1#2009-12-11/08:25:16] SQL>
应该是你where条件的问题,如果你的【表名】是作为参数传入的,就要使用带参数的游标了,由于你的具体情况不详,只能言尽于此了。
比如
create or replace function aaaaa (
p_db_link in varchar2
) return sys_refcursor
as
x_sql varchar2(200);
o_cur sys_refcursor;
begin
x_sql :='select table_name from all_tables@'||p_db_link;
open o_cur for x_sql;
return o_cur;
end aaaaa;
/