首页 > 解决方案 > 在 Oracle 中执行推送和弹出的函数(或过程)

问题描述

这是练习,但我不知道如何解决和编写它!

问题:编写正确执行pushpop的 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;
/

标签: sqloracleplsql

解决方案


就像编码练习一样,我想到了这样的事情:

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

推荐阅读