Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

LỖI:Tham chiếu bộ đếm là mục tiêu của một phép gán - PL / SQL

Việc sửa đổi các câu trả lời trước đó để thực sự cung cấp cho bạn hình tam giác Pascal, mà bạn đã đề cập là bạn đang cố gắng trong một nhận xét:

set serveroutput on format wrapped
declare
   n number(2):=5;
begin
  for a in 1..n loop
    for b in 1..n-a loop
      dbms_output.put(' ');
    end loop;
    for c in 1..2*a-1 loop
      dbms_output.put('*');
    end loop;
    dbms_output.new_line;
  end loop;
end;
/

    *
   ***
  *****
 *******
*********

PL/SQL procedure successfully completed.

Cả dbms_output.put_line của bạn cuộc gọi cần thiết chỉ là dbms_output.put , vì điều đó đang in từng * trên một dòng của riêng nó. Nhưng bạn cần ngắt dòng sau mỗi lần khoảng a vòng lặp, vì vậy tôi đã thêm một dbms_output.newline khi kết thúc điều đó. Bạn cũng đang giảm temp bên trong b vòng lặp, có nghĩa là nó bằng 0 thay vì (n-1) lần thứ hai xung quanh a vòng; nhưng bạn không thực sự cần một temp riêng biệt ở tất cả các biến vì điều đó luôn giống với (n-a)+1+1 chỉ đặt thêm một khoảng trống trên mỗi dòng. (Tôi cũng đã đặt a vòng lặp 1..n vì tôi giả sử bạn muốn thay đổi giá trị của n sau này chỉ ở một nơi). Với n := 8 :

       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************

Tuy nhiên, điều quan trọng là bạn cũng phải set serveroutput on format wrapped , nếu không thì các khoảng trắng đầu bạn đang tạo trong b vòng lặp bị loại bỏ.

Bạn cũng có thể thực hiện việc này trong SQL thuần túy, mặc dù bạn cần cung cấp 5 hai lần hoặc sử dụng biến liên kết hoặc thay thế:

select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5

PASCAL
------------------------------
    *
   ***
  *****
 *******
*********

b của bạn và c các vòng lặp chỉ thực hiện một lpad thủ công thực sự.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật số ngày trước bằng cách sử dụng hàm LAG trong ORACLE

  2. Ánh xạ khóa tổng hợp với Hibernate tạo ra một trường thô trong Oracle

  3. Kết nối JDBC với Oracle Clustered

  4. SQL - duy trì thứ tự dựa trên các tham số truy vấn

  5. các phép nối tiềm ẩn bên trong - chúng có bằng nhau không?