如何在 Toad 中使用 PL/SQL 提交 HTML 表单?

Posted

技术标签:

【中文标题】如何在 Toad 中使用 PL/SQL 提交 HTML 表单?【英文标题】:How to submit an HTML form using PL/SQL in Toad? 【发布时间】:2016-04-26 20:04:33 【问题描述】:

我正在尝试通过在 Toad 中使用 PL/SQL 和 Web 工具包提交数据。我有以下

procedure add_car is 
        begin
           htp.title('August Vehicle Directory');
           htp.bodyopen; 
           Htp.tableopen('border=1 align=center');
                   --Header:
                   HTP.tablerowopen;
                        htp.tabledata(style('Add New Vehicle','#t_1'),'center', ccolspan => '5');
                   HTP.tablerowclose;
                   htp.tablerowopen;
                        htp.tabledata(style('Please add a vehicle to the database by filling out the forum below.','#t_msg'),'center',ccolspan=>'11');
                   htp.tablerowclose;

                   -- Text-box entry:
                   htp.tablerowopen; 
                        HTP.P('<td>');
                            htp.tableopen(); 
                            --
                                htp.formopen('john_package.submit_newcar','post');
                                    htp.tablerowopen;
                                    htp.tabledata(style('Make: ','#t_b'),'center');
                                    htp.tabledata('<input type="text" name="make_box" size="20" maxlength="30" value="">');   
                                    htp.tabledata('&nbsp');
                                    htp.tabledata(style('Model: ','#t_b'),'center');
                                    htp.tabledata('<input type="text" name="model_box" size="20" maxlength="30" value="">');
                                    htp.tabledata('&nbsp');
                                    htp.tabledata(style('Year: ','#t_b'),'center');
                                    htp.tabledata('<input type="text" name="year_box" size="20" maxlength="30" value="">'); 
                                    htp.tabledata('&nbsp');
                                    htp.tabledata(style('Engine: ','#t_b'),'center');
                                    htp.tabledata('<input type="text" name="engine_box" size="20" maxlength="30" value="">'); 
                                    htp.tabledata('&nbsp');
                                    htp.tabledata(style('Seats: ','#t_b'),'center');
                                    HTP.P('<td>');  
                                        htp.formSelectOpen('seats_dropdown');
                                        htp.formSelectOption('1');
                                        htp.formSelectOption('2');
                                        htp.formSelectOption('3');
                                        htp.formSelectOption('4');
                                        htp.formSelectOption('5');
                                        htp.formSelectOption('6');
                                        htp.formSelectOption('7');
                                        htp.formSelectOption('8');
                                        htp.formSelectOption('9');
                                        htp.formSelectOption('10');
                                        htp.formSelectClose;
                                    HTP.P('</TD>');
                                    htp.tablerowclose;
                                htp.formclose;
                                --
                            htp.tableclose;
                        HTP.P('</TD>');
                   htp.tablerowclose;   

                   HTP.tablerowopen;
                        HTP.P('<td align =center colspan=2>');
                        htp.tableopen();
                               htp.tabledata(support.button(0,'p_Submit','Add Vehicle','onClick="return this.form"'));
                               htp.tabledata(support.button(0,'john_package.loadpage','Cancel', 1, null, null),'center');
                               htp.tableclose; 
                        HTP.P('</TD>');               
                   HTP.tablerowclose;  

           htp.tableclose;
           htp.bodyclose;
        exception
            when others then
                htp.p('Error: '||TO_CHAR(SQLCODE)||'-'||SQLERRM);
                write_log ('john_package.add_car', to_char(SQLCODE)||'-'||SQLERRM);
        end add_car;

然后我有一个程序可以从上面提交的表单中插入数据:

        procedure submit_newcar(
            p_make       varchar2 default null,
            p_model        varchar2 default null,
            p_year    varchar2 default null, --Year produced
            p_engine        varchar2 default null, --Engine type
            p_seats        varchar2 default null --Number of seats
            ) IS
        begin
            INSERT INTO JOHN_TABLE_CAR
            (ID, MAKE, MODEL, YEAR, ENGINE, SEATS)
            VALUES 
            (null, p_make, p_model, p_year, p_engine, p_seats);
        exception
            when others then
                htp.p('Error: '||TO_CHAR(SQLCODE)||'-'||SQLERRM);
                write_log ('john_package.submit_newcar', to_char(SQLCODE)||'-'||SQLERRM);
        end submit_newcar;

这似乎不像我预期的那样工作。每次我单击“添加车辆”按钮时,似乎没有调用我从“submit_newcar”过程中插入的内容。我怎样才能让它正常工作?

【问题讨论】:

【参考方案1】:

所以这个问题的答案非常简单,并且在整个检查页面的源 html 时都被注意到了。基本上,我没有在表单中包含我的“提交”,因此每次单击提交按钮都没有执行任何操作。

为了解决这个问题,我需要在表单中关闭以下内容

                HTP.P('<td align =center colspan=2>');
                    htp.tableopen();
                           htp.tabledata(support.button(0,'p_Submit','Add Vehicle','onClick="return this.form"'));
                           htp.tabledata(support.button(0,'john_package.loadpage','Cancel', 1, null, null),'center');
                    htp.tableclose; 
                HTP.P('</TD>');
-- /\ submit button is inside form close now!
htp.formclose;

这样做解决了我的问题。

【讨论】:

以上是关于如何在 Toad 中使用 PL/SQL 提交 HTML 表单?的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 过程和 Toad 执行?

使用 Toad 在 PL/SQL 中进行数据迁移

如何使用 Toad 工具显示 sys_refcursor 输出 pl sql

Toad Oracle Pl/sql 调试作为从断点跳转到断点

如何在调试 PL SQL 脚本时获得 clob 的全部价值

用于格式化 Oracle PL/SQL 代码的标准 Toad 模板?