我如何改进我的程序以在后端成功工作?

How I can improve my procedure to work successfully in a backend?

我正在尝试为我的 courser 项目的后端创建一个动态 sql 过程。我想按特定列排序。

CREATE OR REPLACE PROCEDURE sort_by_column(p_column_name VARCHAR2, p_parameter VARCHAR2) IS
    v_stmt VARCHAR2(1000);
BEGIN
    v_stmt := '
               SELECT * 
               FROM CARS  
               ORDER BY ' || p_column_name || ' ' || p_parameter;
    EXECUTE IMMEDIATE v_stmt;
END;

我这样称呼它:

EXECUTE sort_by_column('model', 'ASC');

编译成功。但不显示任何内容。我如何改进我的程序以便后端可以处理数据?

您需要将程序更改为 return 游标。然后当你调用它时,你需要从游标中获取并显示结果。例如:

CREATE OR REPLACE FUNCTION sort_by_column(p_column_name VARCHAR2,
                                          p_parameter VARCHAR2)
  RETURN SYS_REFCURSOR
IS
    v_stmt  VARCHAR2(1000);
    csr     SYS_REFCURSOR;
BEGIN
    v_stmt := 'SELECT * 
               FROM CARS  
               ORDER BY ' || p_column_name || ' ' || p_parameter;
    OPEN csr FOR v_stmt;
    RETURN csr;
END;

CREATE OR REPLACE PROCEDURE fetch_and_print(p_column_name VARCHAR2,
                                            p_parameter VARCHAR2)
IS
  csr      SYS_REFCURSOR;
  rowCars  CARS%ROWTYPE;
BEGIN
  csr := sort_by_column(p_column_name, p_parameter);

  LOOP
    FETCH csr INTO rowCars;
    EXIT WHEN csr%NOTFOUND;

    DBMS_OUTPUT.PUT_LINE('MFG=' || rowCars.MFG ||
                         '  MODEL=' || rowCars.MODEL ||
                         '  COLOR=' || rowCars.COLOR);
  END LOOP;

  CLOSE csr;
END fetch_and_print;

EXECUTE fetch_and_print('model', 'ASC');

fetch_and_print 中的 DBMS_OUTPUT.PUT_LINE 只是一个示例,因为我不知道您的 CARS table 中有哪些字段 - 您必须更改它以打印任何字段在你的 table.