Oracle报存储过程中调用DBLink同义词出现错误:PLS-00201: 必须声明标识符

前几天编写一个存储过程,需要访问远程数据库的字段,于是建立一个dbLink并建了同义词:

CREATE PUBLIC DATABASE LINK orcl@dbc CONNECT TO orcl IDENTIFIED BY orcl USING 'orcl';
CREATE SYNONYM mtb FOR mytable@orcl@dbc;

这里之所以用orcl@bdc为dblink的名称是为了设置global_names=true。

然后新建一个存储过程调用该同义词:

 v_result mtb.sid%type; 

调用后发现提示:错误:PLS-00201: 必须声明标识符 'MTB.SID';

经过多番查找发现确实是因为身份原因,这里需要注意一定要在被访问的数据库中赋予权限,具体代码如下:

grant select on mytable to orcl;--orcl为用户名

然后就编译通过了。

总结

以上所述是小编给大家介绍的Oracle报存储过程中调用DBLink同义词出现错误:PLS-00201: 必须声明标识符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

您可能感兴趣的文章:

  • Oracle存储过程和存储函数创建方法(详解)
  • Oracle存储过程及调用
  • Oracle中instr和substr存储过程详解
  • oracle中 procedure(存储过程)和function(函数)本质区别
  • Oracle存储过程和自定义函数详解
  • Oracle存储过程循环语法实例分析
(0)

相关推荐

  • Oracle存储过程循环语法实例分析

    本文实例讲述了Oracle存储过程循环语法.分享给大家供大家参考,具体如下: 1.简单循环 语法 loop statements; end loop; 例子: counter := 0; loop counter := counter + 1; exit when counter = 5; end loop; 备注:exit语句立即结束循环,exit when 语句在指定条件出现时停止循环(可以出现在循环代码中的任意位置) 2.while循环 语法 while condition loop st

  • Oracle存储过程及调用

    Oracle存储过程语法 Oracle的存储过程语法如下: create procedure 存储过程名称(随便取) is 在这里可以定义常量.变量.游标.复杂数据类型这里可以定义变量.常量 begin 执行部分 end; (2)带参数的存储过程语法: create procedure 存储过程名称(随便取) (变量1 数据类型,变量2 数据类型,...,变量n 数据类型) is 在这里可以定义常量.变量.游标.复杂数据类型这里可以定义变量.常量 begin 执行部分 end; (3)带输入.输

  • Oracle中instr和substr存储过程详解

    instr和substr存储过程,分析内部大对象的内容 instr函数 instr函数用于从指定的位置开始,从大型对象中查找第N个与模式匹配的字符串. 用于查找内部大对象中的字符串的instr函数语法如下: dbms_lob.instr( lob_loc in blob, pattern in raw, offset in integer := 1; nth in integer := 1) return integer; dbms_lob.instr( lob_loc in clob char

  • Oracle存储过程和自定义函数详解

    概述 PL/SQL中的过程和函数(通常称为子程序)是PL/SQL块的一种特殊的类型,这种类型的子程序可以以编译的形式存放在数据库中,并为后续的程序块调用. 相同点: 完成特定功能的程序 不同点:是否用return语句返回值. 举个例子: create or replace procedure PrintStudents(p_staffName in xgj_test.username%type) as cursor c_testData is select t.sal, t.comm from

  • Oracle存储过程和存储函数创建方法(详解)

    select * from emp; -----------------存储过程------------------------ --定义 create[or replace] procedure 存储过程名称(参数名 [in]/out 数据类型)    is/as    begin --逻辑表达式  end [存储过程名称]; --定义存储过程计算年薪,并答应输出 create or replace procedure proc_salyears(v_no in number)    is  

  • oracle中 procedure(存储过程)和function(函数)本质区别

    Oracle function里面是可以允许有DML语句的,但是不能在查询的时候使用. 我们常用的function如: select max(a) from table ; 这种调用方式是不能执行带有DML的FUNCTION的. 但是如果不用在SQL里面是可以有的 比如 dbms_output.put_line(func(...));   如果函数里面采用自治事务,是可以有DML 的. 什么是"自治事务": 自治事务是可以在其他事务中调用的独立事务. 自治事务可以使事务离开调用事务的上

  • Oracle报存储过程中调用DBLink同义词出现错误:PLS-00201: 必须声明标识符

    前几天编写一个存储过程,需要访问远程数据库的字段,于是建立一个dbLink并建了同义词: CREATE PUBLIC DATABASE LINK orcl@dbc CONNECT TO orcl IDENTIFIED BY orcl USING 'orcl'; CREATE SYNONYM mtb FOR mytable@orcl@dbc: 这里之所以用orcl@bdc为dblink的名称是为了设置global_names=true. 然后新建一个存储过程调用该同义词: v_result mtb

  • oracle 在一个存储过程中调用另一个返回游标的存储过程

    第一种情况是返回的游标是某个具体的表或视图的数据,如: SQL-Code: 复制代码 代码如下: CREATE OR REPLACE PROCEDURE P_TESTA ( PRESULT OUT SYS_REFCURSOR ) AS BEGIN OPEN PRESULT FOR SELECT * FROM USERS; END P_TESTA; 其中USERS就是数据库中一个表.在调用的时候只要声明一个该表的ROWTYPE类型就可以了: SQL-Code: 复制代码 代码如下: CREATE

  • Oracle基础:程序中调用sqlplus的方式

    通过sqlplus可以连接数据库根据用户权限进行数据或者设定操作,但是需要交互操作并返回结果,这篇文章介绍一下如何在程序中使用sqlplus. 环境准备 使用Oracle的精简版创建docker方式的demo环境,详细可参看: https://www.jb51.net/article/153533.htm Here Document 因为sqlplus是控制台的方式与用户进行交互式的输入/输出对应,而在程序执行的过程中显然是需要预先定好的输入,这样可以考虑使用Here Document,比如希望

  • asp.net中调用oracle存储过程的方法

    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. 存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 不多说了,本文通过两种方法介绍asp.net中调用oracle存储过程的方法,具体内容请看下面代码. 调用oracle存储过程方法一: ORACLE代码 CREATE OR REP

  • spring中JdbcTemplate操作oracle的存储过程实例代码

    目录 场景: 功能: 1.JdbcTemplate调用存储过程(Procedure)不带返回值 1.1存储过程 1.2代码 2.JdbcTemplate调用存储过程(Procedure)带返回值但值不是集合类型 2.1存储过程 2.2代码 3.JdbcTemplate调用存储过程(Procedure)带返回值且值集合类型 3.1存储过程 3.2代码 4.附本例使用建表语句 5.附本例使用完整测试代码 总结 场景: 使用java代码调用oracle的存储过程,本例使用JdbcTemplate模板类

  • Java中调用SQL Server存储过程详解

    本文作者介绍了通过Java如何去调用SQL Server的存储过程,详解了5种不同的存储.详细请看下文 1.使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列.不带参数的 call 转义序列的语法如下所示: 复制代码 代码如下: {call procedure-name} 作为实例,在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程: 复制代码 代码如下: CREATE PROCEDURE G

  • java编程调用存储过程中得到新增记录id号的实现方法

    本文实例讲述了java编程调用存储过程中得到新增记录id号的实现方法.分享给大家供大家参考,具体如下: 关于ms sql server2000的存储过程,主要作用是在表test中插入一条记录,然后得到新增加记录的id号. test表三个字段: ID:自动增长 yhm:用户名 字符串类型 kl: 密码   字符串类型 那么在java程序中如何调用这个存储过程才能实现,得到新增加记录的id号 存储过程如下: CREATE PROCEDURE yh_insert @yhm varchar(50),@k

  • asp.net中调用存储过程的方法

    本文实例讲述了asp.net中调用存储过程的方法.分享给大家供大家参考,具体如下: 一.建立并调用一个不带参数的存储过程如下: CREATE PROCEDURE 全部学生<dbo.selectUsers> AS SELECT * FROM 学生 GO EXEC 全部学生 建立并调用一个带参数的存储过程如下: CREATE PROCEDURE 学生查询1 @SNAME VARCHAR(8),@SDEPT VARCHAR(20) AS SELECT * FROM 学生 WHERE 姓名=@SNAM

  • C#中调用MySQL存储过程的方法

    本文实例讲述了C#中调用MySQL存储过程的方法.分享给大家供大家参考.具体如下: 这段代码演示在 C# 程序中调用 MySQL 的存储过程,没有返回值,没有参数传递. MySqlConnection myConnection; myConnection = new MySqlConnection(); myConnection.ConnectionString = "database="+database+";server="+ server+";use

随机推荐