云数据库 GAUSSDB-动态调用匿名块:示例
时间:2024-11-02 18:49:49
示例
gaussdb=# DROP SCHEMA IF EXISTS hr CASCADE; gaussdb=# CREATE SCHEMA hr; CREATE SCHEMA gaussdb=# SET CURRENT_SCHEMA = hr; SET gaussdb=# CREATE TABLE staffs ( staff_id NUMBER, first_name VARCHAR2, salary NUMBER ); CREATE TABLE gaussdb=# INSERT INTO staffs VALUES (200, 'mike', 5800); INSERT 0 1 gaussdb=# INSERT INTO staffs VALUES (201, 'lily', 3000); INSERT 0 1 gaussdb=# INSERT INTO staffs VALUES (202, 'john', 4400); INSERT 0 1 --创建重载函数 gaussdb=# CREATE OR REPLACE PACKAGE pkg1 IS PROCEDURE plus(var1 in int, var2 int, var3 out int); PROCEDURE plus(var1 in out int); END pkg1; / CREATE PACKAGE gaussdb=# CREATE OR REPLACE PACKAGE BODY pkg1 IS PROCEDURE plus(var1 in int, var2 int, var3 out int) AS BEGIN var3 = var1 + var2 + 1; END; PROCEDURE plus(var1 in out int) AS BEGIN var1 = var1 + 1; END; END pkg1; / CREATE PACKAGE BODY --创建存储过程dynamic_proc gaussdb=# CREATE OR REPLACE PROCEDURE dynamic_proc AS staff_id NUMBER(6) := 200; first_name VARCHAR2(20); salary NUMBER(8,2); BEGIN --执行匿名块 EXECUTE IMMEDIATE 'begin select first_name, salary into :first_name, :salary from hr.staffs where staff_id= :dno; end;' USING OUT first_name, OUT salary, IN staff_id; dbe_output.print_line(first_name|| ' ' || salary); END; / CREATE PROCEDURE --创建存储过程调用重载函数 gaussdb=# CREATE OR REPLACE PROCEDURE dynamic_proc1 AS v_sql VARCHAR2(200); var1 NUMBER(6) := 1; var2 NUMBER(6) := 2; var3 NUMBER(6); BEGIN v_sql := 'begin pkg1.plus(:1, :2, :3); end;'; EXECUTE IMMEDIATE v_sql USING var1, var2, out var3; dbe_output.print_line('var3: ' || var3); END; / CREATE PROCEDURE --调用存储过程 gaussdb=# CALL dynamic_proc(); mike 5800.00 dynamic_proc -------------- (1 row) gaussdb=# CALL dynamic_proc1(); var3: 4 dynamic_proc1 --------------- (1 row) --删除存储过程 gaussdb=# DROP PROCEDURE dynamic_proc; DROP PROCEDURE gaussdb=# DROP PROCEDURE dynamic_proc1; DROP PROCEDURE --开启dynamic_sql_check时报错示例 gaussdb=# SET behavior_compat_options = 'dynamic_sql_check'; SET gaussdb=# CREATE OR REPLACE PROCEDURE test_proc_exception001(a out integer, b inout integer, c integer) as BEGIN a := 1; begin b := 1/0; end; EXCEPTION WHEN others THEN b := 2; END; / CREATE PROCEDURE gaussdb=# DECLARE a integer := 1; c integer; BEGIN execute immediate 'begin test_proc_exception001(:1,:2,:1); end;' using in out a, out c, a; END; / ERROR: argnum not match in Dynamic SQL, using args num : 3 , actual sql args num : 2 CONTEXT: PL/pgSQL function inline_code_block line 4 at EXECUTE statement --修改同名占位符 gaussdb=# DECLARE a integer := 1; c integer; BEGIN execute immediate 'begin test_proc_exception001(:1,:2,:3); end;' using in out a, out c, a; END; / ANONYMOUS BLOCK EXECUTE gaussdb=# DROP PROCEDURE test_proc_exception001; DROP PROCEDURE
support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0805.html
看了此文的人还看了
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格
推荐文章
- GaussDB视频教程_gaussdb查看表结构语句_高斯数据库视频教程_华为云
- 调用GaussDB(DWS) API接口_数据仓库服务调用API_如何调用API_在DWS中调用API
- GaussDB数据库考试_GaussDB认证_高斯数据库考试_华为云
- 调用函数_函数调用方式_函数工作流 FunctionGraph-华为云
- CDN动态加速_动态内容CDN加速_华为云CDN动态加速
- GaussDB学习_gaussdb教程_高斯数据库学习_华为云
- 全站加速CDN_CDN动态加速_CDN动态加速技术
- GaussDB培训_GaussDB教程_高斯数据库培训-华为云
- GaussDB使用技巧_高斯数据库下载_高斯数据库使用技巧_华为云
- 调用API_API调用流程_API网关APIG-华为云