我怎样才能获得PL/SQL块来输出SELECT语句的结果,就像我做一个普通的一样SELECT?
例如,如何做一个SELECT像:
SELECT foo, bar FROM foobar;
Run Code Online (Sandbox Code Playgroud)
提示:
BEGIN
SELECT foo, bar FROM foobar;
END;
Run Code Online (Sandbox Code Playgroud)
不起作用.
我在参数中有一个带有BOOLEAN的PL/SQL函数:
function get_something(name in varchar2, ignore_notfound in boolean);
Run Code Online (Sandbox Code Playgroud)
此功能是第三方工具的一部分,我无法改变这一点.
我想在SELECT语句中使用这个函数,如下所示:
select get_something('NAME', TRUE) from dual;
Run Code Online (Sandbox Code Playgroud)
这不起作用,我得到这个例外:
ORA-00904:"TRUE":标识符无效
据我了解,关键字TRUE无法识别.
我怎样才能做到这一点?
我对Oracle数据库中的几个表具有"只读"访问权限.我需要获取一些列的架构信息.我想使用类似于MS SQL的东西sp_help.
我在这个查询中看到了我感兴趣的表:
SELECT * FROM ALL_TABLES
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,Oracle告诉我"在架构中找不到表",是的,参数是正确的.
SELECT
DBMS_METADATA.GET_DDL('TABLE', 'ITEM_COMMIT_AGG', 'INTAMPS') AS DDL
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
在使用我的Oracle通用翻译器9000后,我推测这不起作用,因为我没有足够的权限.鉴于我的约束,我如何获得表上的列的数据类型和数据长度?我有PL-SQL语句的读访问权限?
在为oracle db的表添加列之前,如何添加简单检查?我已经包含了我用来添加列的SQL.
ALTER TABLE db.tablename
ADD columnname NVARCHAR2(30);
Run Code Online (Sandbox Code Playgroud) 这些信息应该很容易找到,但我没有运气.
当我BEGIN - END在PL/SQL中有一个块时,它是否表现为原子事务,它将尝试提交命中END块,如果出现任何问题,则回滚更改?
如果没有,我如何确保BEGIN-END块内的代码表现得像一个原子事务,该块如何"默认"行为?
编辑:我想从存储过程运行,我正在使用隐式块.
我一直试图找出创建Oracle函数或过程时PL/SQL中的IS和AS关键字之间的区别.
我搜索过,但无法找到任何相关信息.有谁知道这个区别?
我正在比较三个Oracle模式.
我想获得每个数据库中使用的所有函数和过程的列表.这可以通过查询吗?(最好包括一个关于它们是否编译的标志)
理想情况下,使用一个标志来指示函数/过程是否在每个模式中都是很好的.但即使只是第一位也比手动检查每个模式更好.
我正在使用oracle 10g快递版.它对数据库开发人员来说非常好用.但我面临执行存储过程的一些问题.
程序:
create or replace procedure temp_proc is
begin
DBMS_OUTPUT.PUT_LINE('Test');
end
Run Code Online (Sandbox Code Playgroud)
它创建成功.但是当我执行时:
execute temp_proc;
它显示ORA-00900:无效的SQL语句
所以需要帮助
在PL/SQL(oracle)中,如果行不存在,最简单的方法是什么?
我想要的东西:
IF NOT EXISTS (SELECT * FROM table WHERE name = 'jonny') THEN
INSERT INTO table VALUES ("jonny", null);
END IF;
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
注意:此表有2个字段,例如姓名和年龄.但只有名字是PK.
任何人都能解释一下Oracle中函数和过程之间的主要区别是什么?如果我能用功能做所有事情,为什么我必须使用程序?
我听说主要区别在于性能,"程序比功能更快".但没有任何细节.
提前致谢.