Perl에서 정의되지 않은 값에 대해 문자 그대로 '널'을 어떻게 인쇄 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/576536

  •  05-09-2019
  •  | 
  •  

문제

쿼리 '설명 테이블'을 실행 중이며 '기본값'열에 대한 'null'의 값을 반환합니다. 그러나 데이터베이스에서 HTML 테이블로 값을 인쇄하려고하면 'NULL'을 인쇄하지 않습니다. 항상 비어 있습니다.

이것이 데이터베이스에서 데이터를 저장하는 방법입니다.

@nulls = ();

while (($null) = $sth1->fetchrow_array)
    {
    push (@nulls, $null);
    }

배열의 내용을 인쇄 할 때 @nulls '널'의 문자 값을 인쇄하지 않습니다. 항상 비어 있습니다. 이 문제를 극복 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

Chris J가 말했듯이, 널 값은 정의되지 않은 값으로 반환됩니다.

경고를 활성화 한 경우 값을 인쇄 할 때 "정의되지 않은 인쇄 값"경고를 받았을 것입니다. 사용 strict 그리고 warnings Pragmata는 많은 시간 디버깅을 절약 할 수 있습니다. 그만큼 diagnostics Pragma는 표준 경고 및 치명적인 오류에 추가 설명 텍스트를 추가합니다.

데이터베이스에서 나오는 NULL 값을 가두고 교체하는 것은 매우 쉽습니다.

use strict;
use warnings;

my @nulls = ();
while ((my $null) = $sth1->fetchrow_array)
    {
            # before perl 5.10: use the ternary operator.
            push @nulls, defined $null ? $null : 'NULL';

            # perl 5.10 adds the defined-or operator: //
            push @nulls, $null // 'NULL';
    }

또는 당신은 당신의 것을 만들 수 있습니다 @nulls 위에 표시하는 것과 같은 방식으로 배열 한 다음 디스플레이 시간에 널을 변경하십시오.

my @pre_5_10  = map { defined $_ ? $_ : 'NULL' } @nulls;
my @perl_5_10 = map { $_ // 'NULL' } @nulls;

다른 팁

에서 http://metacpan.org/pod/dbi , 널 값을 'undef'로 반환합니다.

나는 perl을하지 않지만 내가 사용한 다른 모든 언어에서는 Null의 값을 테스트해야합니다. NULL 인 경우 문자열 리터럴 "NULL"을 인쇄하십시오.

사용중인 데이터베이스를 말하지는 않지만 Oracle에서 포트할 수없는 솔루션을 신경 쓰지 않으면 SQL 레벨에서 수행 할 수 있습니다.

select NVL(some_column, 'NULL')
from some_table
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top