sql - 在 Oracle 中执行推送和弹出的函数(或过程)
问题描述
这是练习,但我不知道如何解决和编写它!
问题:编写正确执行push和pop的 Pakhage 。
问题中没有其他数据或值。
已编辑:最初未分配的问题中被遗忘的部分是编写一个示例包,其中包含可以显示 POP 和 PUSH 如何工作的所需数据。
create or replace package pushpop_demo as
procedure push(val varchar2);
function pop return varchar2;
function stack_depth return simple_integer;
end pushpop_demo;
/
解决方案
就像编码练习一样,我想到了这样的事情:
create or replace package pushpop_demo as
procedure push(val varchar2);
function pop return varchar2;
function stack_depth return simple_integer;
end pushpop_demo;
/
create or replace package body pushpop_demo as
subtype my_string_subtype is varchar2(100);
type varchar2_ntt is table of my_string_subtype;
stuff varchar2_ntt := varchar2_ntt();
procedure push(val varchar2)
is
begin
stuff.extend;
stuff(stuff.last) := val;
end push;
function pop return varchar2
is
val my_string_subtype;
begin
if stuff is not empty then
val := stuff(stuff.last);
stuff.delete(stuff.last);
end if;
return val;
end pop;
-- Report the number of items in the stack
function stack_depth return simple_integer
is
begin
return stuff.count;
end stack_depth;
end pushpop_demo;
/
函数stack_depth
并不是真正需要的,但我认为能够报告当前推送的项目数量可能会很有趣。
演示:
begin
pushpop_demo.push(val => 'Kittens');
pushpop_demo.push(val => 'Puppies');
pushpop_demo.push(val => 'Hamsters');
dbms_output.put_line('Items in stack: '||pushpop_demo.stack_level());
dbms_output.put_line(pushpop_demo.pop());
dbms_output.put_line(pushpop_demo.pop());
dbms_output.put_line(pushpop_demo.pop());
dbms_output.put_line('Items in stack: '||pushpop_demo.stack_level());
end;
/
输出:
Items in stack: 3
Hamsters
Puppies
Kittens
Items in stack: 0
推荐阅读
- r - 带有 for 循环的 Ploty R add_trace 覆盖来自 get(Variable) 的跟踪
- python - 定期调度功能期间的递归错误
- shell - Jenkins管道:使用在shell 1中创建的变量,在shell 2中
- reactjs - 在反应中更新状态属性的有效方法?
- flutter - 为什么在 Dart 中使用 getter 而不是内部类函数的方法?
- node.js - 是什么导致 DynamoDB 操作的间歇性长执行时间
- .net - .NET Entity Framework Core 一对多关系
- ubuntu - 带有 MariaDb 的 Artifactory OSS
- javascript - 我生成了 2 个等长 (15) 的数组,每个位置有 4 个可能的字母可供选择 - 为什么它们返回 53% 到 87% 的相似度?
- matlab - 象征性地评估梯度矩阵